我已阅读here:
在v2.0,3.5和4.0中,ASP.NET 初始化 CLR ThreadPool 每个处理器100个线程(核心)
这是正确的,我查了一下(我有8台核心机器,所以8 * 100 = 800 ):
maxWorkerThreads - 配置最大工作线程数 用于每个CPU的进程。此属性的范围是 来自
5 through 100.
默认为20
。
问题
我不知道这些数字是如何适应的:
第一段说明我每个核心最多100个线程(图像证明了它,我有8个核心)。
但是第二段指出每个核心的默认最大工作线程数是20.所以如果我有8个核心,那么我必须有8 * 20 = 160个最大线程。 不 800。
有人可以光明吗?
更新
我刚刚找到了一种通过c#代码获取关键元素值的方法:
所以现在数字适合,但仍然是 - MSDN say the default is 20 , not 100
然后他们确实提到了100:
这里有什么?
答案 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)