Пул потоков - Thread pool
В компьютерном программировании , пул потоков представляет собой шаблон проектирования программного обеспечения для достижения параллельности выполнения в компьютерной программе. Пул потоков, который также часто называют реплицированными рабочими или моделью рабочих-бригад , поддерживает несколько потоков, ожидающих выделения задач для одновременного выполнения контролирующей программой. Поддерживая пул потоков, модель увеличивает производительность и позволяет избежать задержек при выполнении из-за частого создания и уничтожения потоков для краткосрочных задач. Количество доступных потоков настраивается на вычислительные ресурсы, доступные программе, такие как очередь параллельных задач после завершения выполнения.
Представление
Размер пула потоков - это количество потоков, оставленных в резерве для выполнения задач. Обычно это настраиваемый параметр приложения, настроенный для оптимизации производительности программы. Выбор оптимального размера пула потоков имеет решающее значение для оптимизации производительности.
Одно из преимуществ пула потоков по сравнению с созданием нового потока для каждой задачи состоит в том, что накладные расходы на создание и уничтожение потоков ограничиваются первоначальным созданием пула, что может привести к повышению производительности и стабильности системы . Создание и уничтожение потока и связанных с ним ресурсов может быть дорогостоящим процессом с точки зрения времени. Однако чрезмерное количество потоков в резерве расходует память, а переключение контекста между выполняемыми потоками приводит к снижению производительности. Соединение сокета с другим сетевым узлом, для разрыва и восстановления которого может потребоваться много циклов ЦП, можно поддерживать более эффективно, связав его с потоком, который существует в течение более чем одной сетевой транзакции.
Использование пула потоков может быть полезно, даже если отложить время запуска потока. Существуют реализации пулов потоков, которые упрощают постановку работы в очередь, контроль параллелизма и синхронизацию потоков на более высоком уровне, чем это можно легко сделать при ручном управлении потоками. В этих случаях преимущества использования могут быть второстепенными.
Обычно пул потоков выполняется на одном компьютере. Однако пулы потоков концептуально связаны с фермами серверов, в которых главный процесс, который сам может быть пулом потоков, распределяет задачи по рабочим процессам на разных компьютерах, чтобы увеличить общую пропускную способность. При таком подходе легко поддаются смущающе параллельные задачи.
Количество потоков может динамически регулироваться в течение срока службы приложения в зависимости от количества ожидающих задач. Например, веб-сервер может добавлять потоки, если поступают многочисленные запросы веб-страниц, и может удалять потоки, когда эти запросы сокращаются. Стоимость большего пула потоков - увеличение использования ресурсов. Алгоритм, используемый для определения того, когда создавать или уничтожать потоки, влияет на общую производительность:
- Создание слишком большого количества потоков тратит ресурсы и требует времени на создание неиспользуемых потоков.
- Для уничтожения слишком большого количества потоков потребуется больше времени при их повторном создании.
- Слишком медленное создание потоков может привести к снижению производительности клиента (длительное время ожидания).
- Слишком медленное уничтожение потоков может привести к нехватке ресурсов для других процессов.
Смотрите также
- Асинхронность (компьютерное программирование)
- Шаблон пула объектов
- Шаблон параллелизма
- Grand Central Dispatch
- Параллельные расширения
- Распараллеливание
- Ферма серверов
- Поэтапная архитектура, управляемая событиями
использованная литература
внешние ссылки
- " Запрос по фрагментам, параллельному выполнению и объединению : шаблон пула потоков в Java ", автор Binildas CA
- « Пулы потоков и рабочие очереди » Брайана Гетца.
- « Метод объединения рабочих потоков » Прадип Кумар Саху
- « Work Queue » от Uri Twig: демонстрация кода C ++ объединенных потоков, выполняющих рабочую очередь.
- « Объединение потоков Windows и цепочка выполнения »
- " Smart Thread Pool " от Ами Бар
- « Программирование пула потоков в .NET Framework » Дэвида Кармона.
- « Пул потоков и асинхронные методы », Джон Скит.
- " Создание уведомляющего пула блокирующих потоков в Java ", Амир Кирш
- « Практическое многопоточное программирование с помощью Python: пулы потоков и очереди » от Ноа Гифта
- « Оптимизация стратегий пула потоков для CORBA в реальном времени » Ирфана Пьярали, Марины Спивак, Дугласа С. Шмидта и Рона Цитрона
- « Отложенная отмена. Образец поведения » Филипп Бахманн.
- « Пул потоков C ++ 17 для высокопроизводительных научных вычислений », автор Барак Шошани