首页 > 解决方案 > java的.asparallel()方法中的'batchsize'是什么

问题描述

Java,更具体地说是 eclipse 集合库,有一个方法叫做...

asparallel(ExecutorService ES, int batchSize)

如图所示,它需要两个参数。batchSize论据是什么?

背景

这不是活动的线程数量。这是由ExecutorService. 为了说明,这是我提供的代码的示意流程(不能分享更多)。

ExecutorService executor = Executors.newWorkStealingPool(pThreads);
List<Object> mParallelOutput = objectsOfInterest.toList()
    .asParallel(executor, batchsize1)
    .flatCollect(myObject-> MySubComponent.toList()
                               .asParallel(executor, batchsize2)
                               .flatCollect(p -> p.performComputation(myObject));

举个例子,我有“一堆”计算(performComputation()方法)需要为 list 中的 1-32 个对象执行objectsOfInterest。所有的计算都可以并行完成,我们需要尽可能高效。在试图理解流程时,我想知道batchsize该方法的论点是什么asparallel()。此外,我不确定上面示例代码中对 asparallel 的双重调用是否有任何额外的好处。

标签: javaeclipseparallel-processing

解决方案


https://github.com/eclipse/eclipse-collections/blob/master/docs/guide.md

批量大小决定了提交给线程池的每个任务处理的支持集合(FastList 或 UnifiedSet)中的元素数量。CPU 密集型任务的适当批量大小通常更大,在 10,000 到 100,000 范围内。

所以,我得出结论,在你的情况下 abatchSize = 1是有道理的。(完全平行)

或者:

 #tasks (submitted to the TP) = collection.size() / batchSize

而且我将执行程序的线程数理解为可以同时处理的任务数,我将“对齐”这两个值:#threads ~= #tasks


推荐阅读