gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:28:10 25 4
gpt4 key购买 nike

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

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

var imList = scala.collection.JavaConversions.asScalaBuffer(normalQLFolderList)

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

for (i <- imList .par) {
}

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

最佳答案

可以在恒定时间内转换为并行副本的集合包括可变和不可变 HashMap 和哈希集、范围、 vector 和数组。对于所有其他集合类型,包括来自 Java 的集合的包装器,调用 par 会导致将集合的内容复制为更适合并行化的格式。

这里有更详细的描述:

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

但是,根据集合的大小以及 for block 的成本,为这种转换付费可能是完全合理的。并行 for block 对每个元素执行的处理越多,转换成本就越多。

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

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

关于java - 在将 java 转换的 List 迭代为不可变时使用 scala 并行性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15023666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com