Поток является тяжелым объектом.
Создание нового потока требует большого количества ресурсов, таких как выделение 1 МБ для управляемого стека, создание объекта управляемого потока, стека ядра, объекта потока ядрапользовательский поток среды блока.Все это требует времени и памяти.Поэтому вы не хотите создавать и уничтожать объекты очень быстро.Более того, если у вас есть более одного потока, переключение контекста также потребует некоторых ресурсов
Пул потоков - это место, где CLR может помещать неиспользуемые потоки, если ваше приложение нуждается в этом.
Threadpool изначально содержит 0 потоков, после того как вы запросите поток из пула, пул быстро создаст минимальное количество потоков, определенное для пула.Примерно через 2 минуты неиспользованные темы будут убиты.Но если нагрузка увеличивается и вам нужно больше потоков, пул потоков будет медленно создавать новые потоки, пока не будет достигнут максимальный предел.Вы не можете иметь больше потоков, чем максимум, все новые запросы будут поставлены в очередь и выполнены, как только рабочий поток вернется в пул.В худшем случае вы можете получить OutOfMemoryException
Если поток, взятый из пула, заблокирован, он:
- Содержит ресурсы
- Не выполняет никакой ценной работы, в то время как приложению может понадобиться этот поток для нового запроса
- Нарушает масштабируемость, вводя блоки