スレッドプールスケジューラがどのように機能するかを理解することが重要です。これは、マシンの機能に対して実行中のスレッドの数を微調整するように設計されています。お使いのマシンはおそらく同時に2つのスレッドしか実行できません。現在、デュアルコアCPUが標準です。多分4つ。
したがって、ラップに多数のスレッドをダンプすると、2つのスレッドのみをアクティブ化することから始まります。それらの残りはキューにあり、CPUコアが使用可能になるのを待っています。これらの2つのスレッドの1つが完了するとすぐに、別のスレッドがアクティブになります。1秒に2回、完了しなかったアクティブなスレッドで何が起こっているかを評価します。これは、これらのスレッドがブロックされているために進行しておらず、別のスレッドがアクティブ化できることを大まかに想定しています。これで、3つの実行中のスレッドができました。デフォルトの最大スレッド数である500スレッドを取得するには、249秒かかります。
明らかに、この動作は、スレッドがスレッドプールスレッドとして実行するのに適しているために何をすべきかを詳しく説明しています。すぐに完了し、頻繁にブロックしないようにする必要があります。I/O要求のブロックは個別に処理されることに注意してください。
この動作が適切でない場合は、通常のスレッドを使用できます。すぐに実行を開始し、CPU時間についてプログラム(およびオペレーティングシステム)内の他のスレッドと競合します。このようなスレッドを30,000個作成することはできません。そのために使用できる、十分な仮想メモリがありません。32ビットオペレーティングシステムは、2000スレッドの南のどこかでうんちを出し、使用可能なすべての仮想メモリを消費します。ページングファイルがなくなる前に、64ビットオペレーティングシステムで約50,000スレッドを取得できます。本番プログラムでこれらの制限をテストすることはお勧めしません。