我们有一些使用 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 经验的人那里开始的方向/指针。