Максимальное количество потоков в ThreadPool равно примерно 1000 потоков в 32-разрядной системе .NET4.0.Это меньше для старых версий .NET.Если у вас запущено 1000 потоков, скажем, по какой-то причине они блокируют, когда вы ставите в очередь 1001-ю задачу, она никогда не будет выполнена.
Вы никогда не достигнете максимального числа потоков в 32-битном процессе.Имейте в виду, что каждый поток занимает не менее 1 МБ памяти (это размер стека пользовательского режима), а также любые другие издержки.Вы уже теряете много памяти из CLR и загруженных собственных DLL, поэтому перед использованием такого количества потоков вы получите исключение OutOfMemoryException.
Вы можете изменить количество потоков, которые может использовать ThreadPool, вызвавThreadPool.SetMaxThreads
метод.Однако, если вы планируете использовать такое количество потоков, у вас проблема с кодом на намного больше.Я НЕ рекомендую возиться с подобными конфигурациями ThreadPool.Скорее всего, у вас просто ухудшится производительность.
Имейте в виду, что Task
и ThreadPool.QueueUserWorkItem
, потоки повторно используются после завершения.Если вы создаете задачу или ставите в очередь поток пула потоков, он может или может не создавать новый поток для выполнения вашего кода.Если в пуле уже есть доступные потоки, он будет использовать один из них вместо создания (дорогого) нового потока.Только если методы, которые вы выполняете в задачах, никогда не вернутся, вам следует беспокоиться о нехватке потоков, но, как я уже сказал, это совсем другая проблема с вашим кодом.