为什么使用并行集合不会更快?

Pla*_*kül 7 scala scala-2.9 parallel-collections

我只是想稍微测试一下并行集合,我使用了以下代码行(在REPL中):

(1 to 100000).par.filter(BigInt(_).isProbablePrime(100))
Run Code Online (Sandbox Code Playgroud)

反对:

(1 to 100000).filter(BigInt(_).isProbablePrime(100))
Run Code Online (Sandbox Code Playgroud)

但并行版本并不快.事实上它甚至感觉有点慢(但我还没有真正测量过).

有人对此有解释吗?

编辑1:是的,我确实有一个多核处理器

编辑2:好的,我自己"解决"了这个问题.实现isProbablePrime似乎是问题,而不是并行集合.我isProbablePrime用另一个函数替换来测试素数,现在我获得了预期的加速.

axe*_*l22 6

具有顺序和并行范围的两者filter将分别生成矢量数据结构 - a Vector或a ParVector.

这是从范围集合生成的并行向量的已知问题 - 并行向量的变换器方法(例如filter)不并行构造向量.

已经开发出一种允许有效并行构建载体的解决方案,但尚未实施.我建议您提交一张,以便下次发布时可以修复它.