scala - 与从头开始创建顺序集合相比,将顺序集合转换为并行集合的成本是多少

标签 scala collections parallel-processing parallel-collections

根据to the official docs有两种创建并行集合的选项:

1)

// There's a little bug here, doesn't matter for the sake of the question
import scala.collection.parallel.mutable.ParArray
val pv = new ParVector[Int]

2)

val pv = Vector(1,2,3,4,5,6,7,8,9).par

现在,有什么区别?当我从简单的顺序集合转换它时,是否存在任何性能损失?

如果您必须创建一个有点并行的集合(例如,数千个元素),您会怎么做?您会从头开始创建它还是转换它?

谢谢大家!

编辑:

正如 @oxbow_lakes 所说,有一篇文档专注于这个主题,但我正在尝试获得“有经验的建议”。我的意思是,例如,如果您必须从数据库中读取一个大集合,您会怎么做。

最佳答案

取决于集合。 Vector 基本上是免费的,ParVector 只是向量的包装。与数组相同。其他的,例如List,必须以不同的结构完全复制,更适合并行性。如果您希望结果也是列表,然后复制回新列表。

您可以看看this brand new guide on the scala documentation site ,创建并行集合部分。

关于scala - 与从头开始创建顺序集合相比,将顺序集合转换为并行集合的成本是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10004615/

相关文章:

java - 对于这种情况,最佳数据结构的选择是什么?

java - 选择正确的集合

python - 如何并行安装/编译 pip 要求(使 -j 等效)

python - 如果不返回错误,则无法使用 ProcessPoolExecutor 进行并行处理

Java线程notify() wait()以加快计算速度

performance - 为什么我的Scala尾递归比while循环快?

scala - Scala 中复制对象的简洁方法

java - 线程作为 Java 对象

scala - Akka HTTP Websocket,如何识别actor内部的连接

scala - Scala 的绝对反向路由?