繁体   English   中英

澄清线程池最大线程

[英]Clarification on thread pool max threads

我在这里读到:

在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:

在此输入图像描述

是怎么回事?

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

根据MSDN,

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

资源

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM