web-dev-qa-db-ja.com

スレッドプールの最大スレッドの明確化

私は読んだ ここ それ:

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コアを持っています)。

しかし、2番目の段落では、コアあたりのデフォルトの最大ワーカースレッドは20です。したがって、コアが8つある場合は、8 * 20 = 160の最大スレッドが必要です。 not800。

誰かが光を当ててくれませんか?

更新:

私はちょうどc#コードを介してキー要素値を取得する方法を見つけました:

enter image description here

これで数値は収まりましたが、それでも MSDNは、デフォルトは100 ではなく20であると言います

enter image description here

そして彼らは100に言及します:

enter image description here

ここで起こっているのですか?

18
Royi Namir

ソースコードを調べたところ、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バージョンによって異なります。

10
Andrii Litvinov

MSDNによると、

.NET4.5のデフォルトの最大[ASP.netサーバープール内のスレッド数]は5,000です。

ソース

0
cjcurrie