Основная потребность в потоках adpool заключается в том, чтобы обрабатывать короткие небольшие задачи, которые, как ожидается, завершатся практически мгновенно. Аппаратные обработчики прерываний часто работают в контексте стека, который не подходит для неядерного кода, но аппаратный обработчик прерываний может обнаружить, что обратный вызов завершения ввода-вывода в пользовательском режиме должен быть запущен как можно скорее. Создание нового потока для запуска такой вещи было бы огромным излишним. Наличие нескольких предварительно созданных потоков, которые можно отправить для выполнения обратных вызовов завершения ввода-вывода или других подобных вещей, намного эффективнее.
Ключевым аспектом таких потоков является то, что если методы завершения ввода-вывода всегда завершаются по существу мгновенно и никогда не блокируются, а число таких потоков, в которых в настоящее время выполняются такие методы, по меньшей мере равно количеству процессоров, то единственный путь для любого другого потока мог бы выполняться до того, как закончится один из вышеупомянутых методов, если бы один из других методов блокировал или его время выполнения превышало обычный временной интервал потока; ни то, ни другое не должно происходить очень часто, если пул потоков используется по назначению.
Если нельзя ожидать, что метод завершится в течение 100 мс или около того, когда он начнет выполнение, метод должен выполняться другими способами, отличными от пула основного потока. Если нужно выполнить много задач, которые интенсивно загружают ЦП, но не блокируют, может быть полезно распределить их, используя пул потоков приложений (по одному на ядро ЦП), который отделен от «основного» пула потоков, поскольку используется больше потоков, чем ядер, будет неэффективно при выполнении неблокирующих задач, интенсивно использующих процессор. Однако если выполнение метода займет секунду или дольше и большую часть времени он будет заблокирован, метод, скорее всего, должен выполняться в выделенном потоке и почти наверняка не должен выполняться в потоке основного потока. Если длительная операция должна быть вызвана чем-то вроде обратного вызова ввода-вывода,