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

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

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

Представление

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

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

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

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

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

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

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

использованная литература

внешние ссылки