2016-11-11 34 views
0

我正在使用par.map表達式在Scala(SBT)中並行執行進程。如何在Scala中用.par控制並行進程的數量?

考慮list.par.map(function(_))(我正在準備MWE)。這意味着function(_)應以並行方式應用於list的所有元素。在我的例子中,list有3個元素。但是斯卡拉並行執行只有function(list(1))function(list(2)),並且只能在function(list(3))之後執行。

是否有這種行爲的原因?與程序在雙核處理器上執行的事實有關係嗎?或者你如何強制並行執行所有三件事?

+0

http://www.scala-lang.org/api/current/scala/collection/parallel/immutable/ParRange.html#tasksupport_=(ts:scala.collection.parallel.TaskSupport):Unit –

+1

可能的重複項[斯卡拉平行集合並行度](http://stackoverflow.com/questions/5424496/scala-parallel-collections-degree-of-parallelism) – Andrey

回答

1

這個問題已經被問過:

,並有據可查:

你想要的東西是一樣的東西:

var parallelList = list.par 
parallelList.tasksupport = new ForkJoinTaskSupport(
    new scala.concurrent.forkjoin.ForkJoinPool(parlevel)) 
parallelList.map(function(_)) 

這就是說,如果你在2核心處理器運行你只有兩個線程(除非核超線程當然),這意味着你不能有超過一次2個並行操作。

+0

@卡羅你滿意這個答案? – Danny

相關問題