Пул потоков


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

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

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

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

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

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

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

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

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

На языках

В Go мы работаем не с потоками, а с горутинами (более дешевыми, мультиплексированными в системные потоки), существует аналогичный шаблон «рабочий пул». [6] [7] [8]

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

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

  1. ^ Гарг, Раджат П. и Шарапов, Илья Методы оптимизации приложений - высокопроизводительные вычисления Prentice-Hall 2002, p. 394
  2. ^ Голуб, Аллен (2000). Укрощение потоков Java . Апресс. п. 209.
  3. ^ Yibei Ling; Трейси Маллен; Сяола Линь (апрель 2000 г.). «Анализ оптимального размера пула потоков». Обзор операционных систем ACM SIGOPS . 34 (2): 42–55. DOI : 10.1145 / 346152.346320 . S2CID 14048829 . 
  4. ^ "Класс QThreadPool | Qt Core 5.13.1" .
  5. ^ «GitHub - vit-vit / CTPL: современная и эффективная библиотека пула потоков C ++» . 2019-09-24.
  6. ^ «Пойдите по примеру: рабочие пулы» . gobyexample.com . Проверено 27 июля 2021 .
  7. ^ «Эффективный Go - язык программирования Go» . golang.org . Проверено 27 июля 2021 . Другой подход, который хорошо управляет ресурсами, состоит в том, чтобы запустить фиксированное количество горутин-дескрипторов, все считывающие из канала запроса. Количество горутин ограничивает количество одновременных вызовов для обработки
  8. ^ «Дело в пользу пула рабочих Go - brandur.org» . brandur.org . Проверено 27 июля 2021 . Когда дело доходит до вопроса о том, какие правильные конструкции для параллелизма язык должен предоставлять разработчикам, я искренне верю, что каналы и горутины Go настолько хороши, насколько это возможно. Они обеспечивают хороший баланс между мощностью и гибкостью, одновременно избегая склонности к тупикам, которые вы наблюдаете в модели pthread, аду обслуживания, создаваемому обратными вызовами, или невероятным концептуальным накладным расходам обещаний.

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

  • " Запрос по фрагментам, параллельному выполнению и объединению : шаблон пула потоков в Java ", автор Binildas CA
  • « Пулы потоков и рабочие очереди » Брайана Гетца.
  • " Метод объединения рабочих потоков " Прадип Кумар Саху
  • « Work Queue » от Uri Twig: демонстрация кода C ++ объединенных потоков, выполняющих рабочую очередь.
  • « Объединение потоков и выполнение в Windows »
  • " Smart Thread Pool " от Ами Бар
  • « Программирование пула потоков в .NET Framework » Дэвида Кармона.
  • « Пул потоков и асинхронные методы », Джон Скит
  • « Создание уведомляющего пула блокирующих потоков в Java », Амир Кирш
  • « Практическое многопоточное программирование с помощью Python: пулы потоков и очереди » от Ноа Гифта
  • « Оптимизация стратегий пула потоков для CORBA в реальном времени » Ирфана Пьярали, Марины Спивак, Дугласа С. Шмидта и Рона Цитрона
  • « Отложенная отмена. Образец поведения » Филипп Бахманн.
  • « Пул потоков C ++ 17 для высокопроизводительных научных вычислений », автор Барак Шошани
Источник « https://en.wikipedia.org/w/index.php?title=Thread_pool&oldid=1035738423 »