Важно понимать, как работает планировщик пула потоков. Он был разработан для точной настройки количества работающих потоков в зависимости от возможностей вашей машины. Ваша машина, вероятно, может работать только с двумя потоками одновременно, двухъядерные процессоры являются текущим стандартом. Может быть четыре.
Таким образом, когда вы сбрасываете кучу потоков на колени, он начинает активировать только два потока. Остальные находятся в очереди, ожидая, когда станут доступны ядра процессора. Как только один из этих двух потоков завершается, он активирует другой. Дважды в секунду он оценивает, что происходит с активными потоками, которые не завершились. Это делает грубое предположение, что эти потоки блокируются и, следовательно, не прогрессируют, и позволяет активировать другой поток. Теперь у вас есть три запущенных потока. Установка 500 потоков, максимальное количество потоков по умолчанию, займет 249 секунд.
Очевидно, что это поведение объясняет, что должен делать поток, чтобы он мог работать как поток пула потоков. Это должно завершиться быстро и не блокировать часто. Обратите внимание, что блокировка запросов ввода-вывода рассматривается отдельно.
Если это поведение вас не устраивает, вы можете использовать обычную тему. Он начнет работать сразу и конкурировать с другими потоками в вашей программе (и операционной системе) за процессорное время. Создание 30000 таких потоков невозможно, для этого недостаточно виртуальной памяти. 32-разрядная операционная система выдает где-то к югу от 2000 потоков, занимая всю доступную виртуальную память. Вы можете получить около 50 000 потоков в 64-битной операционной системе, прежде чем файл подкачки закончится. Тестирование этих пределов в производственной программе не рекомендуется.