在将java转换后的List迭代到不可变时使用scala并行性

blu*_*sky 7 java parallel-processing performance scala

我正在尝试使用scala并行性来加快执行时间.

因此,要将java ArrayList转换为不可变的,我使用:

var imList = scala.collection.JavaConversions.asScalaBuffer(normalQLFolderList)
Run Code Online (Sandbox Code Playgroud)

然后在迭代时利用多个核心我使用:

for (i <- imList .par) {
}
Run Code Online (Sandbox Code Playgroud)

我是否以正确的方式利用scala并行性?在这种情况下迭代列表.asScalaBuffer是否有很大的性能影响?

axe*_*l22 5

可以在恒定时间内转换为并行对应的集合包括可变和不可变的散列映射和散列集,范围,向量和数组.对于所有其他集合类型,包括来自Java的集合的包装器,调用par结果将集合的内容复制为更适合并行化的格式.

这里将更详细地描述:

http://docs.scala-lang.org/overviews/parallel-collections/conversions.html

但是,根据集合的大小以及for块的价格,支付此转换可能是完全合理的.并行for块对每个元素的处理越多,转换的成本就越累积.

我会说,如果每个元素的计算涉及任何非常重要的事情(例如,它至少创建新对象)支付转换是有意义的,但一个好主意是测量顺序版本和并行版本之间的性能差异,包括调用par:

http://docs.scala-lang.org/overviews/parallel-collections/performance.html