ThreadPool.SetMinthreads
を設定した場合の影響を理解しようとしています。 1つのAzureAppServiceで複数の仮想アプリケーションを実行しています。私の理解では、これらすべての仮想アプリケーションはアプリプールを共有し、ワーカープロセスは1つだけになります(アプリプールの最大ワーカープロセスが1であると想定)。
以下の2つの質問があります。
ThreadPool.SetMinThreads
を100個のワーカースレッドとIOスレッド)に設定した場合、各アプリドメインには100個のワーカースレッドと100個のIOロード時のスレッド?正確には、ThreadPool.SetMinThreadsはAppDomain、ワーカープロセス、またはアプリプール内に適用されますか?ThreadPoolのスコープは何ですか?たとえば、プロセスとスレッドには物理メモリ、仮想メモリ、プールメモリが必要なため、特定のWindowsシステムで作成できるプロセスまたはスレッドの数は、プロセスの方法に応じて、これらのリソースの1つによって最終的に決定されます。またはスレッドが作成され、どの制約が最初にヒットするか。 https://blogs.technet.Microsoft.com/markrussinovich/2009/07/05/pushing-the-limits-of-windows-processes-and-threads/
MinThreadsは、生成されるワーカースレッドの数を管理します遅延なしで。
スレッドプール(ワーカーまたはIOCPプール)からのスレッドを必要とする何かを行うときはいつでも、システムは最初に空きスレッドがあるかどうかを確認します。
そうでない場合は、現在生成されているスレッドの数を確認します。その数がMinThreadsより小さい場合、すぐに新しいスレッドが生成されます。それ以外の場合は、システムに依存しますが、通常は約300〜500ミリ秒の短い時間待機します。それでも空きスレッドがない場合は、新しいスレッドが生成されます。
もちろん、これはすべてMaxThreadsによって制限されています。
とはいえ、IISは、マシンに基づいて適切な数を把握するのに非常に優れており、ほとんどの場合、そのままにしておくのが最善です。リクエストの処理が心配な場合は、個人的には触れないでください。一方、自分で多くのバックグラウンドタスクを生成している場合は、それが賢明かもしれません。実際に変更を加える前に、測定することを強くお勧めします。
ただし... MinThreadsを100に設定しても、特にシステムは実際に必要な数のスレッドのみを開始するため、害を及ぼすことはめったにありません。