2

私は 80 ファイルの情報を処理する必要があり、8 つのスレッドのグループを介してそれを行っています。私がやりたいことは、常に 8 つのスレッドを実行することです (現在、8 つのスレッドがあり、それらの 8 つが仕事を終えた後) 、別の 8 が生成されるなど)。

だから私は彼を行う方法があるかどうか知りたい:

  • 8 つのスレッドを起動します。
  • 1 つのスレッドがジョブを終了した後、別のスレッドを起動します (そのため、ジョブが完了するまで常に 8 つのスレッドを実行しています)
4

2 に答える 2

5

スレッド プール、特に固定サイズのスレッド プールを使用しないのはなぜですか。スレッド プール サイズを 8 スレッドに設定し、すべての作業項目をRunnable/Callableオブジェクトとして送信します。スレッド プールは、構成された 8 つのスレッドを使用してこれらを実行します。

于 2013-07-09T22:53:22.230 に答える
3

そのため、誰もがすぐに飛び込んで、スレッド プールを使用するように指示します。確かに、それはあなたが望むものを達成するための正しい方法です. 問題は、それが正しいことかどうかです。問題に一連のスレッドを投げるほど単純ではなく、魔法のようにすべてが解決されます。

あなたは処理の性質を私たちに伝えていません。ジョブは I/O バウンドですか、それとも CPU バウンドですか1 ? CPU バウンドの場合、スレッドは何もしません。それらが I/O バウンドである場合は、スレッド化役立つ場合があります。

8 つのコア (または計算ユニット) があるかどうかはまだわかりません。それが保証できない場合は、8 つのスレッドを実行するのが最善ではない可能性があります。

考えることがたくさんあります。ソリューションの複雑さが増しています。たぶん、それはあなたが望むものを手に入れているかもしれません。

1 : はい、ファイルを処理していると言いましたが、それだけでは十分ではありません。処理が集中している可能性があります (ビデオ ファイルのレンダリングを考えてください)。または、非常に高速なディスク (SSD またはメモリ マップ ファイルなど) からファイルを読み取っている可能性があります。

于 2013-07-09T23:03:31.593 に答える