スレッド プールのスレッドはバックグラウンド スレッドです。フォアグラウンド スレッドとバックグラウンド スレッド を参照してください。各スレッドは、既定のスタック サイズを使用して既定の優先順位で実行します。また、スレッドはマルチスレッド アパートメント内にあります。
各プロセスにはスレッド プールが 1 つだけあります。
スレッド プールのスレッドでの例外
スレッド プールのスレッドで処理できない例外が発生すると、プロセスが終了します。この規則には、次の 3 つの例外があります。
詳細については、「マネージ スレッドの例外」を参照してください。
メモ : |
|---|
.NET Framework Version 1.0 および 1.1 では、スレッド プールのスレッドの未処理の例外は、共通言語ランタイムによって通知なしにトラップされます。このため、アプリケーション状態が破損し、最終的にアプリケーションが停止することにより、デバッグが困難になることがあります。 |
スレッド プールのスレッドの最大数
スレッド プールのキューに配置できる操作の数は、使用できるメモリの容量によってしか制限されませんが、スレッド プールでは、プロセスで同時にアクティブにできるスレッドの数が制限されます。既定では、ワーカー スレッドが CPU ごとに 25、I/O 完了スレッドが 1,000 に制限されています。
スレッドの最大数を制御するには、GetMaxThreads メソッドと SetMaxThreads メソッドを使用します。
メモ : |
|---|
.NET Framework Version 1.0 および 1.1 では、スレッド プールのサイズはマネージ コードから設定できません。共通言語ランタイムをホストするコードでは、mscoree.h で定義された CorSetMaxThreads を使用してサイズを設定できます。 |
アイドル スレッドの最小数
スレッド プールは、すべてのスレッドがアイドルの場合でも最小数の空きスレッドを保持するため、キューに配置されたタスクをすぐに開始できます。この下限を超えたアイドル スレッドは、システム リソースを節約するために終了されます。既定では、プロセッサごとに 1 つのアイドル スレッドが保持されます。
スレッド プールには、新しいアイドル スレッドを開始するまでの遅延時間 (.NET Framework Version 2.0 では 0.5 秒) が組み込まれています。アプリケーションが短時間のうちに多くのタスクを定期的に開始する場合、アイドル スレッドの数をわずかに増やすだけで、スループットを大幅に向上させることができます。アイドル スレッドの数を多く設定しすぎると、システム リソースが無駄に消費されます。
スレッド プールで保持されるアイドル スレッドの数を制御するには、GetMinThreads メソッドと SetMinThreads メソッドを使用します。
メモ : |
|---|
.NET Framework Version 1.0 では、アイドル スレッドの最小数を設定できません。 |