Jump to content

Пул потоков

Пример пула потоков (зеленые прямоугольники) с ожидающими задачами (синий) и завершенными задачами (желтый).

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

Производительность

[ редактировать ]

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

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

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

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

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

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

См. также

[ редактировать ]
  1. ^ Гарг, Раджат П. и Шарапов, Илья Методы оптимизации приложений - Высокопроизводительные вычисления Prentice-Hall 2002, p. 394
  2. ^ Голуб, Аллен (2000). Укрощение Java-потоков . Апресс. п. 209.
  3. ^ Ибэй Лин; Трейси Маллен; Сяола Линь (апрель 2000 г.). «Анализ оптимального размера пула потоков». Обзор операционных систем ACM SIGOPS . 34 (2): 42–55. дои : 10.1145/346152.346320 . S2CID   14048829 .
  4. ^ «Класс QThreadPool | Qt Core 5.13.1» .
  5. ^ «GitHub — vit-vit/CTPL: современная и эффективная библиотека пула потоков C++» . Гитхаб . 24 сентября 2019 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: ffc72b31273653bf209774024f95a5c6__1676140560
URL1:https://arc.ask3.ru/arc/aa/ff/c6/ffc72b31273653bf209774024f95a5c6.html
Заголовок, (Title) документа по адресу, URL1:
Thread pool - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)