私は 80 ファイルの情報を処理する必要があり、8 つのスレッドのグループを介してそれを行っています。私がやりたいことは、常に 8 つのスレッドを実行することです (現在、8 つのスレッドがあり、それらの 8 つが仕事を終えた後) 、別の 8 が生成されるなど)。
だから私は彼を行う方法があるかどうか知りたい:
- 8 つのスレッドを起動します。
- 1 つのスレッドがジョブを終了した後、別のスレッドを起動します (そのため、ジョブが完了するまで常に 8 つのスレッドを実行しています)
私は 80 ファイルの情報を処理する必要があり、8 つのスレッドのグループを介してそれを行っています。私がやりたいことは、常に 8 つのスレッドを実行することです (現在、8 つのスレッドがあり、それらの 8 つが仕事を終えた後) 、別の 8 が生成されるなど)。
だから私は彼を行う方法があるかどうか知りたい:
そのため、誰もがすぐに飛び込んで、スレッド プールを使用するように指示します。確かに、それはあなたが望むものを達成するための正しい方法です. 問題は、それが正しいことかどうかです。問題に一連のスレッドを投げるほど単純ではなく、魔法のようにすべてが解決されます。
あなたは処理の性質を私たちに伝えていません。ジョブは I/O バウンドですか、それとも CPU バウンドですか1 ? CPU バウンドの場合、スレッドは何もしません。それらが I/O バウンドである場合は、スレッド化が役立つ場合があります。
8 つのコア (または計算ユニット) があるかどうかはまだわかりません。それが保証できない場合は、8 つのスレッドを実行するのが最善ではない可能性があります。
考えることがたくさんあります。ソリューションの複雑さが増しています。たぶん、それはあなたが望むものを手に入れているかもしれません。
1 : はい、ファイルを処理していると言いましたが、それだけでは十分ではありません。処理が集中している可能性があります (ビデオ ファイルのレンダリングを考えてください)。または、非常に高速なディスク (SSD またはメモリ マップ ファイルなど) からファイルを読み取っている可能性があります。