Roy*_*mir 18 c# asp.net .net-4.0 threadpool
我在这里读到:
在v2.0,3.5和4.0中,ASP.NET 初始化每个处理器(核心)100个线程的CLR ThreadPool
这是正确的,我检查了它(我有8个核心机器,所以8*100 = 800):
maxWorkerThreads - 基于每个CPU配置进程使用的最大工作线程数.此属性的范围来自
5 through 100.
默认值20
.
题
我不知道数字如何适合这里:
第一段说明每个核心最多有100个线程(图像证明了它,我有8个核心).
但第二段指出每个核心的默认最大工作线程数为20.因此,如果我有8个核心,那么我必须有8*20 = 160个最大线程. 不是 800.
有人可以光明吗?
更新:
我刚刚找到了一种通过c#代码获取关键元素值的方法:
所以现在数字适合,但仍然 - MSDN说默认值是20,而不是100
然后他们确实提到了100:
这是怎么回事?
And*_*nov 10
我查看了源代码,发现默认值MaxWorkerThreads
设置为100
private static readonly ConfigurationProperty _propMaxWorkerThreads = new ConfigurationProperty("maxWorkerThreads", typeof (int), (object) 100, (TypeConverter) null, (ConfigurationValidatorBase) new IntegerValidator(1, 2147483646), ConfigurationPropertyOptions.None);
Run Code Online (Sandbox Code Playgroud)
此字段将添加到静态构造函数中的属性集合中
ProcessModelSection._properties.Add(ProcessModelSection._propMaxWorkerThreads);
Run Code Online (Sandbox Code Playgroud)
在属性定义中,它们将默认值设置为20
[IntegerValidator(MaxValue = 2147483646, MinValue = 1)]
[ConfigurationProperty("maxWorkerThreads", DefaultValue = 20)]
public int MaxWorkerThreads
Run Code Online (Sandbox Code Playgroud)
但这显然没有效果.也许这是某种遗留实施.顺便说一下,只有当autoConfig
设置为false时,它才会以这种方式运行.当它设置为true时,我的应用程序中有32K工作线程.可能这种行为取决于IIS版本.