首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与预期结果不相上下,但与地图无关。

与预期结果不相上下,但与地图无关。
EN

Stack Overflow用户
提问于 2020-01-22 16:13:58
回答 1查看 55关注 0票数 0

我只是通过par方法,发现在foreach中,它的结果序列是随机的顺序,但与map的情况不一样。

我知道par使用了一些算法来实现并行计算,但是为什么它不发生在地图上呢?

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-22 18:45:56

在概念上,我们区分了时间和空间的顺序。并行集合在时间意义上按顺序执行操作,但在空间意义上它们是有序的.语义状态

副作用的操作会导致不确定性。

foreach采取了一个副作用操作println,因此其效果可能会执行“无序”.注意,副作用对他们来说是没有“结构”的,它们只是会发生的事情。另一方面,List[T]具有结构,而对列表的mapping是一种结构持久化操作.因此

并行集合的“无序”语义仅意味着操作将按顺序执行(在时间意义上)。也就是说,不按顺序排列),这并不意味着结果将被重新“组合”为无序(在空间意义上)。相反,结果通常总是按顺序重新组合的--也就是说,一个并行集合按A、B、C的顺序再一次按A、B、C顺序重新组装,而不是B、C、A等其他任意顺序。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59863974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档