【问题标题】:Will Scala's parallel collections guarantee ordering?Scala 的并行集合会保证排序吗?
【发布时间】:2011-07-11 14:14:49
【问题描述】:

如果我有这个:

val a = Array(...)

我写

a.par.map(e => someFunc(e))

生成的集合是否与非并行集合的顺序相同?

【问题讨论】:

标签: scala parallel-processing parallel-collections


【解决方案1】:

是的,但函数本身的执行没有任何特定的顺序。

List(1,2,3).par foreach print // could print out 213

【讨论】:

  • 任何支持并行的集合是否保证顺序?
  • 是的,顺便说一句,我刚刚注意到可能存在重复的link
  • 我看到了聚合链接,但我认为它并不完全重复。
【解决方案2】:

并行集合维护其非并行等价物的所有合同。

map 操作保留顺序的集合上,例如List,并行的map 也将保留顺序。在map 不保留顺序的集合上,例如Set,并行版本中不会保留顺序。

对于无序集合,无法保证并行操作的结果甚至与非并行等效项具有相同的遍历顺序。

【讨论】:

  • 您能提供一些参考资料(文档,或 scala lib 中的单元测试)吗?我相信你在实践中确实如此(我试过),但我需要保证
  • 这里涉及到:docs.scala-lang.org/overviews/parallel-collections/…(请注意,透明度是设计的一种激励质量。语义部分讨论了出现不确定性的情况,并指出将分区计算的结果结合起来按顺序。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-17
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
相关资源
最近更新 更多