close
Перейти к содержанию

Thread pool

Материал из Википедии — свободной энциклопедии
Пул потоков
Thread pool
Схема принципа работы пула потоков
Схема принципа работы пула потоков
Тип Параллельного программирования
Назначение Эффективное управление многопоточностью
Плюсы Снижение накладных расходов на создание и уничтожение потоков
Минусы При неоптимально великом или малом размере теряет эффективность
Родственные шаблоны Пул объектов, Производитель-потребитель
Описан в Design Patterns Нет

Thread pool (с англ.«Пул потоков») — паттерн проектирования программного обеспечения, предназначенный для эффективного управления потоками исполнения при параллельной обработке задач. Вместо создания и удаления нового потока под каждую задачу, паттерн предлагает создание набора потоков, обрабатывающих потокобезопасную очередь[1].

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

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

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

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

Примечания

[править | править код]
  1. 1 2 3 4 5 Yibei Ling, Tracy Mullen, Xiaola Lin. Analysis of Optimal Thread Pool Size (англ.) // ACM SIGOPS : журнал. — 2000. — 14 February. doi:10.1145/346152.346320.
  2. Liangzhou Wang, Chaobin Wang. Producer-consumer Model Based Thread Pool Design (англ.) // IOP Publishing : журнал. — 2020. doi:10.1088/1742-6596/1616/1/012073.