澄清线程池最大线程

时间:2014-06-07 18:18:03

标签: c# asp.net .net-4.0 threadpool

我已阅读here

  

在v2.0,3.5和4.0中,ASP.NET 初始化 CLR ThreadPool 每个处理器100个线程(核心)

这是正确的,我查了一下(我有8台核心机器,所以8 * 100 = 800 ):

enter image description here

但后来我看到thisthis

  

maxWorkerThreads - 配置最大工作线程数   用于每个CPU的进程。此属性的范围是   来自5 through 100.默认为20

问题

我不知道这些数字是如何适应的:

第一段说明我每个核心最多100个线程(图像证明了它,我有8个核心)。

但是第二段指出每个核心的默认最大工作线程数是20.所以如果我有8个核心,那么我必须有8 * 20 = 160个最大线程。 800。

有人可以光明吗?

更新

我刚刚找到了一种通过c#代码获取关键元素值的方法:

enter image description here

所以现在数字适合,但仍然是 - MSDN say the default is 20 , not 100

enter image description here

然后他们确实提到了100:

enter image description here

这里有什么

2 个答案:

答案 0 :(得分:10)

我查看了源代码,发现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版本。

答案 1 :(得分:0)

根据MSDN,

  

默认最大值[ASP.net服务器池中的线程数]   .NET 4.5是5,000

Source