Пул потоков

В компьютерном программировании пул потоков — это шаблон проектирования программного обеспечения , обеспечивающий параллельное выполнение компьютерной программы. Часто также называется моделью воспроизводимых рабочих или моделью рабочей бригады . [1] пул потоков поддерживает несколько потоков , ожидающих задач выделения для одновременного выполнения контролирующей программой. Поддерживая пул потоков, модель повышает производительность и позволяет избежать задержек при выполнении из-за частого создания и уничтожения потоков для кратковременных задач. [2] Количество доступных потоков настраивается в соответствии с вычислительными ресурсами, доступными программе, например очередью параллельных задач после завершения выполнения.
Производительность
[ редактировать ]Размер пула потоков — это количество потоков, резервируемых для выполнения задач. Обычно это настраиваемый параметр приложения, настроенный для оптимизации производительности программы. [3] Выбор оптимального размера пула потоков имеет решающее значение для оптимизации производительности.
Одним из преимуществ пула потоков по сравнению с созданием нового потока для каждой задачи является то, что затраты на создание и уничтожение потоков ограничиваются первоначальным созданием пула, что может привести к повышению производительности и стабильности системы . Создание и уничтожение потока и связанных с ним ресурсов может оказаться дорогостоящим процессом с точки зрения времени. Однако чрезмерное количество резервных потоков приводит к потере памяти, а переключение контекста между выполняемыми потоками приводит к снижению производительности. Соединение сокета с другим сетевым хостом, разрыв и восстановление которого может потребовать многих циклов ЦП, можно поддерживать более эффективно, связывая его с потоком, который существует в течение более чем одной сетевой транзакции.
Использование пула потоков может быть полезным, даже если не учитывать время запуска потока. Существуют реализации пулов потоков, которые упрощают постановку работы в очередь, управление параллелизмом и синхронизацию потоков на более высоком уровне, чем это можно легко сделать при ручном управлении потоками. [4] [5] В этих случаях преимущества в производительности использования могут быть вторичными.
Обычно пул потоков выполняется на одном компьютере. Однако пулы потоков концептуально связаны с фермами серверов , в которых главный процесс, который сам может быть пулом потоков, распределяет задачи между рабочими процессами на разных компьютерах, чтобы увеличить общую пропускную способность. досадно параллельных задач. Этот подход легко поддается решению [ нужна ссылка ]
Количество потоков может динамически регулироваться в течение срока службы приложения в зависимости от количества ожидающих задач. Например, веб-сервер может добавлять потоки, если поступает множество запросов веб-страниц , и может удалять потоки, когда количество запросов сокращается. [ оспаривается – обсуждаем ] Платой за увеличение пула потоков является увеличение использования ресурсов. Алгоритм, используемый для определения того, когда создавать или уничтожать потоки, влияет на общую производительность:
- Создание слишком большого количества потоков приводит к пустой трате ресурсов и времени на создание неиспользуемых потоков.
- Уничтожение слишком большого количества потоков потребует больше времени при их повторном создании.
- Слишком медленное создание потоков может привести к снижению производительности клиента (длительному времени ожидания).
- Слишком медленное уничтожение потоков может лишить другие процессы ресурсов.
См. также
[ редактировать ]- Асинхронность (компьютерное программирование)
- Шаблон пула объектов
- Шаблон параллелизма
- Гранд Центральная диспетчерская
- Параллельные расширения
- Распараллеливание
- Серверная ферма
- Поэтапная событийно-ориентированная архитектура
Ссылки
[ редактировать ]- ^ Гарг, Раджат П. и Шарапов, Илья Методы оптимизации приложений - Высокопроизводительные вычисления Prentice-Hall 2002, p. 394
- ^ Голуб, Аллен (2000). Укрощение Java-потоков . Апресс. п. 209.
- ^ Ибэй Лин; Трейси Маллен; Сяола Линь (апрель 2000 г.). «Анализ оптимального размера пула потоков». Обзор операционных систем ACM SIGOPS . 34 (2): 42–55. дои : 10.1145/346152.346320 . S2CID 14048829 .
- ^ «Класс QThreadPool | Qt Core 5.13.1» .
- ^ «GitHub — vit-vit/CTPL: современная и эффективная библиотека пула потоков C++» . Гитхаб . 24 сентября 2019 г.
Внешние ссылки
[ редактировать ]- « Запрос по срезам, параллельное выполнение и объединение: шаблон пула потоков в Java », автор Binildas CA
- « Пулы потоков и рабочие очереди », Брайан Гетц
- « Метод объединения рабочих потоков », Прадип Кумар Саху
- « Work Queue » Ури Твига: демонстрация кода C++ объединенных потоков, выполняющих рабочую очередь.
- « Пул потоков Windows и цепочка выполнения »
- « Умный пул потоков » от Ami Bar
- « Программирование пула потоков в .NET Framework », Дэвид Кармона
- « Создание пула потоков, блокирующих уведомления, в Java », Амир Кирш
- « Практическое многопоточное программирование на Python: пулы потоков и очереди », Ной Гифт
- « Оптимизация стратегий пула потоков для CORBA в реальном времени », Ирфан Пьярали, Марина Спивак, Дуглас К. Шмидт и Рон Сайтрон
- « Отложенная отмена. Модель поведения » Филиппа Бахмана
- « Пул потоков C++17 для высокопроизводительных научных вычислений », Барак Шошани