首先,我假设每个集合类都会收到一个额外的par
方法,该方法将集合转换为适合的并行数据结构(如map
返回Scala 2.8中元素类型的最佳集合)。
现在看来有些集合类支持par
方法(例如数组),但其他集合类有toParSeq
,toParIterable
方法(例如List)。这有点奇怪,因为经常不使用或推荐Array。
这是什么原因?在所有收集类中使用par
做“正确的事情”不是更好吗?
如果我有可以并行处理的数据,我应该使用哪些类型? scala.collection
中的特征或实施的类型直接?
或者我现在应该更喜欢Arrays
,因为它们似乎更便宜并行化?
答案 0 :(得分:5)
列表不太适合并行处理。原因是要到达列表的末尾,您必须遍历每个元素。因此,您也可以将列表视为迭代器,因此也可以使用更通用的内容,如toParIterable
。
任何具有快速索引的集合都是并行处理的理想选择。这包括实现LinearSeqOptimized
的任何内容,以及树和哈希表。 Array
具有尽可能快的索引,所以这是一个相当自然的选择。您还可以使用ArrayBuffer
之类的内容(par
方法返回ParArray
)。