Scala并行集合工作负载平衡策略

时间:2018-03-22 21:10:22

标签: multithreading scala

我一直在玩Scala并行集合,我想知道是否有办法轻松定义要使用的工作负载平衡策略。

例如,让我们说我们计算1到K = 500 000之间有多少素数:

def isPrime(k: Int) = (2 to k/2).forall(k % _ != 0)
Array.range(1, 500*1000).par.filter(isPrime).length

如果所有.par正在进行的是将要处理的数据划分为不同的连续块,那么并行化该算法并没有太大的优势,因为无论如何最后的块将占据总运行时间。

另一方面,运行此算法使得每个线程具有均匀分布的工作份额将解决问题(通过让N个线程中的每一个从索引x € (0 .. N-1)开始然后仅工作关于x+kN)上的元素。

我想避免编写这样的样板代码。是否有一些参数可以让我轻松告诉Scala的库如何做到这一点?

0 个答案:

没有答案