2

我有一个我称之为的集合.par,如下所示:

myCollection.par.map(element => longRunningOperation(element)).seq
println("after map")

在调用 println 之前,调用会.seq保证所有线程在继续之前加入,并且所有映射都完成吗?

4

2 回答 2

8

map一旦调用操作,工作线程就会启动。map在操作完成之前,它们都被框架连接起来。到你打电话的时候seq,已经没有更多正在运行的工作线程了。

于 2011-08-19T11:18:55.503 回答
4

是的,它会。事实上,你不需要.seq在最后打电话。

回答此类问题的简单方法是记住,在没有副作用的情况下,并行集合与非并行集合具有完全相同的语义。除非 longRunningOperation 中的代码具有明显的副作用,否则您能够判断代码正在并行运行的唯一方法是检查处理器利用率。

于 2011-08-19T12:32:58.010 回答