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

Разъяснение потоков потоков пула потоков

Я прочитал здесь, что:

В версиях версии 2.0, 3.5 и 4.0 ASP.NET инициализирует поток потоков CLR ThreadPool с 100 потоками на процессор (ядро)

Это правильно, я проверил его (у меня 8 основных машин, поэтому 8 * 100 = 800):

enter image description here

Но потом я увидел этот и this:

maxWorkerThreads - настраивает максимальное количество рабочих потоков для использовать для процесса на основе каждого процессора. Диапазон для этого атрибута от 5 through 100. По умолчанию используется 20.

Вопрос

Я не вижу, как цифры подходят здесь:

В первом параграфе указано, что у меня есть 100 потоков на ядро ​​(изображение доказывает это, я имею 8 ядер).

Но во втором абзаце говорится, что максимальные рабочие потоки по умолчанию для ядра равны 20. Таким образом, если у меня есть 8 ядер, тогда у меня должно быть 8 * 20 = 160 максимальных потоков. не 800.

Может кто-то пролить свет?

Update:

Я просто нашел способ получить значение ключевого элемента с помощью кода С#:

enter image description here

Итак, теперь число вписывается, но все же - MSDN говорит, что значение по умолчанию - 20, а не 100

enter image description here

И тогда они упоминают 100:

enter image description here

Что здесь происходит?

4b9b3361

Ответ 1

Я посмотрел исходный код и обнаружил, что значение по умолчанию для MaxWorkerThreads установлено на 100

private static readonly ConfigurationProperty _propMaxWorkerThreads = new ConfigurationProperty("maxWorkerThreads", typeof (int), (object) 100, (TypeConverter) null, (ConfigurationValidatorBase) new IntegerValidator(1, 2147483646), ConfigurationPropertyOptions.None);

Это поле добавляется к коллекции свойств в статическом конструкторе

ProcessModelSection._properties.Add(ProcessModelSection._propMaxWorkerThreads);

В определении свойства они устанавливают значение по умолчанию 20

[IntegerValidator(MaxValue = 2147483646, MinValue = 1)]
[ConfigurationProperty("maxWorkerThreads", DefaultValue = 20)]
public int MaxWorkerThreads

Но это явно не дает эффекта. Возможно, это какая-то унаследованная реализация. Кстати, он ведет себя таким образом, только если для параметра autoConfig установлено значение false. Когда он установлен в true, у меня есть 32K рабочих потоков в моем приложении. Вероятно, это поведение зависит от версии IIS.

Ответ 2

Согласно MSDN,

максимальный по умолчанию [количество потоков в пуле серверов ASP.net] для .NET 4.5 - 5000

Источник