我只是通过par方法,发现在foreach中,它的结果序列是随机的顺序,但与map的情况不一样。
我知道par使用了一些算法来实现并行计算,但是为什么它不发生在地图上呢?
scala> val petnames = Seq("tiger", "coco", "mini", "dora","dodo", "momo", "cod", "neo", "simbha", "dante")
scala> petnames.par.foreach( x => println(x.capitalize))
Neo
Cod
Coco
Mini
Dante
Momo
Dora
Tiger
Dodo
Simbha
scala> println(petnames.par.map(_.capitalize))
ParVector(Tiger, Coco, Mini, Dora, Dodo, Momo, Cod, Neo, Simbha, Dante)发布于 2020-01-22 18:45:56
在概念上,我们区分了时间和空间的顺序。并行集合在时间意义上按顺序执行操作,但在空间意义上它们是有序的.语义状态
副作用的操作会导致不确定性。
foreach采取了一个副作用操作println,因此其效果可能会执行“无序”.注意,副作用对他们来说是没有“结构”的,它们只是会发生的事情。另一方面,List[T]具有结构,而对列表的mapping是一种结构持久化操作.因此
并行集合的“无序”语义仅意味着操作将按顺序执行(在时间意义上)。也就是说,不按顺序排列),这并不意味着结果将被重新“组合”为无序(在空间意义上)。相反,结果通常总是按顺序重新组合的--也就是说,一个并行集合按A、B、C的顺序再一次按A、B、C顺序重新组装,而不是B、C、A等其他任意顺序。
https://stackoverflow.com/questions/59863974
复制相似问题