私は読んだ ここ それ:
V2.0、3.5、および4.0では、ASP.NETはCLR ThreadPoolをプロセッサ(コア)あたり100スレッドで初期化します
それは正しいです、私はそれをチェックしました(私は8コアマシンを持っているので、8 * 100 = 800):
maxWorkerThreads —CPUごとにプロセスに使用するワーカースレッドの最大数を構成します。この属性の範囲は
5 through 100.
からです。デフォルトは20
です。
質問
数字がここにどのように収まるかわかりません:
最初の段落では、コアあたり最大100スレッドがあると述べています(画像はそれを証明しています、私は8コアを持っています)。
しかし、2番目の段落では、コアあたりのデフォルトの最大ワーカースレッドは20です。したがって、コアが8つある場合は、8 * 20 = 160の最大スレッドが必要です。 not800。
誰かが光を当ててくれませんか?
更新:
私はちょうどc#コードを介してキー要素値を取得する方法を見つけました:
これで数値は収まりましたが、それでも MSDNは、デフォルトは100 ではなく20であると言います
そして彼らは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バージョンによって異なります。