Пул потоков - Thread pool

Образец пула потоков (зеленые поля) с ожидающими задачами (синий) и завершенными задачами (желтый)

В компьютерное программирование, а пул потоков это шаблон разработки программного обеспечения для достижения параллелизм исполнения в компьютерной программе. Часто также называют реплицированные рабочие или же модель рабочий-бригада,[1] пул потоков поддерживает несколько потоки ожидать задачи быть выделенным для одновременный исполнение контролирующей программой. Поддерживая пул потоков, модель увеличивает производительность и позволяет избежать задержек при выполнении из-за частого создания и уничтожения потоков для краткосрочных задач.[2] Количество доступных потоков настраивается на вычислительные ресурсы, доступные программе, например очередь параллельных задач после завершения выполнения.

Спектакль

Размер пула потоков - это количество потоков, хранящихся в резерве для выполнения задач. Обычно это настраиваемый параметр приложения, настроенный для оптимизации производительности программы.[3] Выбор оптимального размера пула потоков имеет решающее значение для оптимизации производительности. Метод анализа пула потоков (HTA) на основе гиперболы был предложен для определения оптимального размера пула потоков для процесса индексирования в облаке на основе доступной рабочей нагрузки и пропускной способности.[4]

Одним из преимуществ пула потоков перед созданием нового потока для каждой задачи является то, что накладные расходы на создание и уничтожение потоков ограничиваются первоначальным созданием пула, что может привести к улучшению спектакль и лучшая система стабильность. Создание и уничтожение потока и связанных с ним ресурсов может быть дорогостоящим с точки зрения времени процессом. Однако чрезмерное количество резервных потоков расходует память, а переключение контекста между выполняемыми потоками приводит к снижению производительности. Соединение сокета с другим сетевым хостом, для разрыва и восстановления которого может потребоваться много циклов ЦП, можно поддерживать более эффективно, связывая его с потоком, который существует в течение более чем одной сетевой транзакции.

Использование пула потоков может быть полезно, даже если отложить время запуска потока. Существуют реализации пулов потоков, которые упрощают постановку работы в очередь, контроль параллелизма и синхронизацию потоков на более высоком уровне, чем это можно легко сделать при ручном управлении потоками.[5][6] В этих случаях преимущества использования могут быть вторичными.

Обычно пул потоков выполняется на одном компьютере. Однако пулы потоков концептуально связаны с серверные фермы в котором главный процесс, который сам может быть пулом потоков, распределяет задачи по рабочим процессам на разных компьютерах, чтобы увеличить общую пропускную способность. Смущающе параллельный проблемы легко поддаются этому подходу.[нужна цитата ]

Количество потоков можно динамически регулировать в течение срока службы приложения в зависимости от количества ожидающих задач. Например, веб сервер может добавлять темы, если их много страница в Интернете поступают запросы и могут удалять потоки, когда эти запросы сокращаются.[оспаривается ] Стоимость большего пула потоков - увеличение использования ресурсов. Алгоритм, используемый для определения того, когда создавать или уничтожать потоки, влияет на общую производительность:

  • Создание слишком большого количества потоков тратит впустую ресурсы и требует времени на создание неиспользуемых потоков.
  • Для уничтожения слишком большого количества потоков потребуется больше времени при их повторном создании.
  • Слишком медленное создание потоков может привести к снижению производительности клиента (длительное время ожидания).
  • Слишком медленное уничтожение потоков может привести к нехватке ресурсов для других процессов.

Смотрите также

Рекомендации

  1. ^ Гарг, Раджат П. и Шарапов, Илья Методы оптимизации приложений - высокопроизводительные вычисления Прентис-Холл 2002, стр. 394
  2. ^ Голуб, Аллен (2000). Укрощение потоков Java. Апресс. п. 209.
  3. ^ Ибэй Линь; Трейси Маллен; Сяола Линь (апрель 2000 г.). «Анализ оптимального размера пула потоков». Обзор операционных систем ACM SIGOPS. 34 (2): 42–55. Дои:10.1145/346152.346320. S2CID  14048829.
  4. ^ Харшит Гуджрал; Абхинав Шарма; Сангита Миттал (август 2018 г.). «Определение оптимального пула потоков для параллельного расширенного поиска без выхода из облака». 2018 Одиннадцатая Международная конференция по современным вычислениям (IC3). С. 1–6. Дои:10.1109 / IC3.2018.8530645. ISBN  978-1-5386-6834-4. S2CID  53287502.
  5. ^ "Класс QThreadPool | Qt Core 5.13.1".
  6. ^ «GitHub - vit-vit / CTPL: современная и эффективная библиотека пула потоков C ++». 2019-09-24.

внешняя ссылка