java - 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 的双重调用是否有任何额外的好处。
解决方案
从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
推荐阅读
- xamarin.forms - 绑定到 Xamarin 表单 FlexLayout.Basis
- mongodb - MongoDB Atlas - Java 连接不起作用
- r - 玩 R 环境
- php - Google People API - 获取 listPeopleConnections
- python - 在 Biopython 中将字符串 DNA 转换为 Seq 对象
- peoplesoft - 具有 GetNextNumberWithGapsCommit 函数的 PeopleSoft AE 最初出错,但稍后会成功
- swift - 在 imagePickerController 中获取选定的图像并将其传递给 coreML
- java - Spring MockMvc:以任意顺序匹配 JSON 对象的集合
- android - Android - 检测统一音量设备
- excel - Excel VBA - 过滤数据透视表中的特定数据