Подтвердить что ты не робот

Значения по умолчанию для System.Threading.ThreadPool.SetMaxThreads

Предположим, что я не устанавливаю значения явно, вызывая функцию:

System.Threading.ThreadPool.SetMaxThreads

Каковы значения по умолчанию?

4b9b3361

Ответ 1

Это зависит от версии платформы .NET, измененной в версиях 2.0, 3.0 и 4.0. В 2.0 он был в 50 раз больше ядер. В версии 3.0 (aka 2.0 SP1) он был в 250 раз больше ядер, 4.0 сделал его динамическим в зависимости от битности и ресурсов ОС. Максимальные потоки ввода-вывода всегда были 1000, если я правильно помню.

В целом, это безумно высоко, и программа никогда не должна приближаться. На 32-битной машине программа, скорее всего, будет бомбить с помощью OOM в первую очередь, когда все эти потоки потребляют доступную виртуальную память с их суммой в 1 мегабайт. В общем, он может выйти из-под контроля, когда есть много запросов на поток TP, а работающие не завершаются в течение нескольких минут. Идеал для потока TP не должен занимать больше половины секунды.

Отладочное окно Debug > Windows > Threads сообщает неприятную правду. И дает очень хороший совет, почему эти потоки TP не завершаются, вы можете увидеть их стек вызовов.

Ответ 2

Существует один пул потоков для каждого процесса. Начиная с .NET. Framework версии 4, размер по умолчанию пула потоков для процесса зависит от нескольких факторов, таких как размер виртуального адреса пространство. Процесс может вызвать метод GetMaxThreads для определения количество потоков. Количество потоков в пуле потоков может быть изменен с помощью метода SetMaxThreads. Каждая нить использует размер стека по умолчанию и выполняется с приоритетом по умолчанию. Blockquote

Неуправляемый код, на котором размещается .NET Framework, может изменять размер пул потоков с помощью функции CorSetMaxThreads, определенной в Файл mscoree.h.

Ответ 3

Это не фиксированное число, оно зависит от доступной памяти и других факторов - вы можете найти ее во время выполнения с помощью GetMaxThreads()