Разъяснение потоков потоков пула потоков
Я прочитал здесь, что:
В версиях версии 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]()
Что здесь происходит?
Ответы
Ответ 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
Источник