我正在寻找GPars功能,它允许在顺序执行的并行子任务集部分中分离大任务。
即。迭代 K 的数组大小,执行并行任务块的顺序分配,每个块的大小为 threadCount 。
换句话说,不要在第一次迭代数组并立即提交所有任务,而是在前一个块准备就绪时使用分页顺序执行赋值(阻止OOM)。
类似下面的代码,但不是首先列出页面和提交任务,而是必须按顺序处理页面。
myHugeList.getNextPage().each {
withPool(threadCount) { Closure.callAsync().get() }
}
谢谢, Yefym
答案 0 :(得分:0)
您可能正在寻找以下内容:
withPool(numOfThreads){ for(myHugeList.splitIntoPages中的entriesInPage){ resultPages<< entriesInPage.collectParallel(myClosure) } } 缺点是每次迭代都会等待前一次迭代完成,可能会使一些线程未被充分利用。
其中一个选择可能是一组演员从调度员那里拉出任务,调度员负责管理myHugeList。