4

根据官方文档,有两种创建并行集合的选项:

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 所说,有一段文档专注于这个主题,但我正在尝试获得“经验丰富的建议”。我的意思是,例如,如果您必须从数据库中读取大量集合,您会怎么做。

4

2 回答 2

3

取决于收藏。Vector基本上是免费的,ParVector只是向量的包装。对Arrays. 其他的,例如List,将不得不以不同的结构完全复制,更适合并行性。如果您希望结果也成为列表,则将其复制回新列表。

您可以在 scala 文档站点上查看这个全新的指南,创建并行集合部分。

于 2012-04-04T07:26:48.967 回答
3

par方法的官方文档说:

对于大多数集合类型,此方法通过复制所有元素来创建一个新的并行集合。对于这些集合,par 需要线性时间[...]

特定集合(例如ParArraymutable.ParHashMap)通过创建共享相同底层数据集的并行集合来覆盖此默认行为。对于这些集合,par 需要常数或次线性时间。

也就是说,通常 O(n) 中的操作,除非使用可变集合ParArrayParHashMap,它小于 O(n) - 但可能不是恒定时间。

于 2012-04-04T07:28:14.550 回答