ThreadPoolExecutor と CompletionService を使用した Java のコードがいくつかあります。タスクは大きなバッチでプールに送信されます。結果は完了サービスに送られ、バッチ全体が完了するのを待たずに、利用可能な場合に完了したタスクを収集します。
ThreadPoolExecutor _executorService =
new ThreadPoolExecutor(MAX_NUMBER_OF_WORKERS, new LinkedBlockingQueue(20));
CompletionService _completionService =
new ExecutorCompletionService<Callable>(_executorService)
//submit tasks
_completionService.submit( some task);
//get results
while(...){
Future result = _completionService.poll(timeout);
if(result)
//process result
}
プール内のワーカーの総数は MAX_NUMBER_OF_WORKERS です。利用可能なワーカーなしで送信されたタスクはキューに入れられます。最大 20 個のタスクをキューに入れることができ、その後、タスクは拒否されます。
このアプローチに対応するGparsは何ですか?
gpars 並列処理に関するドキュメントを読んだところcollectManyParallel()
、anyParallel()
、 、 などの多くの潜在的なオプションが見つかりましたが、どれをテストすればよいかわかりfork/join
ません。ドキュメントで比較として「完了」または「完了サービス」についての言及を見つけたいと思っていましたが、何も見つかりませんでした。gpars の経験者からどこから始めるべきかについての方向性/指針を探しています。