在Scala中使用并行集合的首选方法是什么?

时间:2010-12-18 17:35:11

标签: scala parallel-processing language-design scala-collections

首先,我假设每个集合类都会收到一个额外的par方法,该方法将集合转换为适合的并行数据结构(如map返回Scala 2.8中元素类型的最佳集合)。

现在看来有些集合类支持par方法(例如数组),但其他集合类有toParSeqtoParIterable方法(例如List)。这有点奇怪,因为经常不使用或推荐Array。

这是什么原因?在所有收集类中使用par做“正确的事情”不是更好吗?

如果我有可以并行处理的数据,我应该使用哪些类型? scala.collection中的特征或实施的类型直接?

或者我现在应该更喜欢Arrays,因为它们似乎更便宜并行化?

1 个答案:

答案 0 :(得分:5)

列表不太适合并行处理。原因是要到达列表的末尾,您必须遍历每个元素。因此,您也可以将列表视为迭代器,因此也可以使用更通用的内容,如toParIterable

任何具有快速索引的集合都是并行处理的理想选择。这包括实现LinearSeqOptimized的任何内容,以及树和哈希表。 Array具有尽可能快的索引,所以这是一个相当自然的选择。您还可以使用ArrayBuffer之类的内容(par方法返回ParArray)。