Пулом потоков называется набор заранее подготовленных потоков, запущенных и находящихся в заблокированном состоянии (заморозке) в ожидании некоторого события. При возникновении события, ассоциированного с потоком из пула, последний переходит в активное сотояние (размораживается) и производит обработку подготовленных для него данных, после чего снова блокируется. Таким образом, изменяя набор исходных данных для потока и генерируя необходимое для его запуска событие, можно добиться параллельной обработки нескольких наборов данных без повторных порождений и ожиданий завершения потоков. С учетом совокупности потоков в пуле, такой подход позволяет эффективно распараллеливать алгоритмы, требующие для своей реализации фиксированного количества потоков.
Инициализация пула потоков реализуется обычно в начале программы или блока кода, эксклюзивно использующего данный пул. Завершение работы с потоками пула и уничтожение пула - в конце программы или соответствующего блока кода.
Для пула потоков должны быть предусмотрены механизмы: 1) инициализации и завершения работы с пулом; 2) безопасного доступа к замороженному потоку в целях подготовки его к неблокирующему запуску; 3) неблокирующий запуск ранее полученного и подготовленного потока;
Для каждого потока пула должны быть предусмотрены механизмы: 1) определения состояния потока (состояние работы или состояние заморозки); 2) формирования данных для потока; 3) неблокирующего запуска потока (возможно совмещение пунктов 2 и 3)
Указанный набор механизмов является необходимым и достаточным для пула, потоки которого не предусматривают постобработку результатов.
Разработанная на лекционном занятии параллельная сортировка требует для своей работы фиксированного максимального числа потоков и не требует постобработки результатов сортировки, следовательно может быть реализована с использованием пула потоков, принципы функционирования которого рассмотрены выше.