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