根据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所说,有一篇专注于这个主题的文档,但我正试图获得“经验丰富的建议”。我的意思是,如果你必须从数据库中读取一个大集合,你会怎么做。
答案 0 :(得分:3)
取决于收藏品。 Vector
基本上是免费的,ParVector
只是向量的包装器。 Arrays
也是如此。其他人,例如List
,必须完全复制到不同的结构中,更符合并行性。如果您希望结果也是List,则将其复制回新列表。
您可以查看this brand new guide on the scala documentation site,创建并行集合部分。
答案 1 :(得分:3)
par
方法的官方文档说:
对于大多数集合类型,此方法通过复制所有元素来创建新的并行集合。对于这些集合,par需要线性时间 [...]
特定集合(例如
ParArray
或mutable.ParHashMap
)通过创建共享相同基础数据集的并行集合来覆盖此默认行为。对于这些集合,par需要恒定的或次线性时间。
也就是说,通常在O(n)中的操作,除了使用可变集合ParArray
和ParHashMap
时,它少于O(n) - 但可能不是恒定的时间。