是否会在并行集合上调用.seq以确保所有线程都已连接?

时间:2011-08-19 10:51:07

标签: scala parallel-collections

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

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

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

2 个答案:

答案 0 :(得分:8)

调用map操作后,将启动工作线程。在map操作完成之前,它们都由框架加入。当您调用seq时,不再有正在运行的工作线程。

答案 1 :(得分:4)

是的,它会的。实际上,您最后不需要致电.seq

回答这样的问题的简单方法是记住,在没有副作用的情况下,并行集合与非并行集合具有完全相同的语义。除非你的longRunningOperation中的代码有可见的副作用,否则你能够告诉代码并行运行的唯一方法是检查处理器利用率。