我有一个我称之为.par
的集合,如下所示:
myCollection.par.map(element => longRunningOperation(element)).seq
println("after map")
在调用println之前,调用.seq
是否保证所有线程在继续之前加入,并且所有映射都已完成?
答案 0 :(得分:8)
调用map
操作后,将启动工作线程。在map
操作完成之前,它们都由框架加入。当您调用seq
时,不再有正在运行的工作线程。
答案 1 :(得分:4)
是的,它会的。实际上,您最后不需要致电.seq
。
回答这样的问题的简单方法是记住,在没有副作用的情况下,并行集合与非并行集合具有完全相同的语义。除非你的longRunningOperation中的代码有可见的副作用,否则你能够告诉代码并行运行的唯一方法是检查处理器利用率。