3

ThreadPool.SetMinthreadsの設定の影響を理解しようとしています。 1つのAzure App Serviceで複数の仮想アプリケーションを実行しています。私の理解では、これらの仮想アプリケーションはすべてアプリケーションプールを共有し、1つのワーカープロセスしか持ちません(アプリケーションプールの最大ワーカープロセスは1と仮定します)。ThreadPool SetMinThreads - 設定の影響

私には以下の2つの質問があります。この設定で

  1. 私はのは100件のワーカースレッドとIOスレッドを言わせしThreadPool.SetMinThreadsを設定した場合、私は安全にそれがロードされると、各アプリケーションドメインは100件のワーカースレッドと100個のIOスレッドを持っていると仮定することができますか?正確に言えば、ThreadPool.SetMinThreadsはAppDomain、またはWorker ProcessまたはApp Pool内に適用されますか? ThreadPoolの範囲は何ですか?
  2. また、システムが基本となるホストの容量によって決定されるため、システムが生成できる最大スレッドに制限はないものとします。これは、明示的にThreadPool.SetMaxThreadsを設定しないと、システムは新しいスレッドを生成し、CPU /メモリが最大値に達するまで継続的な負荷がある場合、それを継続します。私は私の仮定をサポートするために、以下の文に基づかています:

プロセスとスレッドを、例えば、 ができること、物理メモリ、仮想 メモリ、およびプールメモリので、プロセスまたはスレッドの数を必要としますプロセスまたは スレッドが作成され、どの制約が最初にヒットするかによって、最終的にこれらのリソースの1つが によって決定されます。 https://blogs.technet.microsoft.com/markrussinovich/2009/07/05/pushing-the-limits-of-windows-processes-and-threads/

+0

を必要とするスレッドの数を開始します特にとして、まれに有害なのですか?スレッドプール内のスレッドの最小数を変更する必要はほとんどありません。 Msoftは、スレッドプールの動作を最適にするために多くの時間を費やしました。なぜ違いますか? – mikelegg

+0

多数の同時ユーザーがいるこのシステムでパフォーマンステストを実行すると、最小スレッドが影響を与えます(これは、間違っていると言っています。エラー数と応答時間はスレッド数に関連しています – Thomas

答えて

2

MinThreadsは、多くのワーカースレッドが遅延なしを生み出しする方法を決定します。

スレッドプールからのスレッド(ワーカーまたはIOCPプール)を必要とする何かを行うときは、システムはまず空きスレッドがあるかどうかを確認します。

もしそうでなければ、現在生成されているスレッドの数を調べます。その数がMinThreadsより小さい場合は、直ちに新しいスレッドが生成されます。それ以外の場合は、システムに依存しますが、通常は約300〜500ms程度の短い時間待機します。まだ空きスレッドがない場合は、新しいスレッドを生成します。

もちろん、これはまだすべてMaxThreadsによって制限されています。

すべてのことは、IISはあなたのマシンに基づいて賢明な数字を見つけることに非常によく、ほとんどの場合、それを一人で残しておくことが最も良いと言います。リクエストを処理することが心配ならば、私は個人的にそれに触れません。一方、あなた自身が多くのバックグラウンドタスクを産んでいるなら、それは賢明かもしれません。実際に変更を加える前に、測定することを強くお勧めします。

けれども... 100にMinThreadsを設定すると、システムが唯一あなたがそれを変更したいんなぜそれが実際にとにかく

関連する問題