2013-06-26 29 views
0

假設我有一個〜10K元素的數組,我需要處理數組中的所有元素。我想以這種方式處理它們,只有K元素被並行處理。我使用Scala 2.9。我試過平行收集(見下文),但我看到更多K元素並行處理。Scala中的並行處理2.9

 
import collection.parallel.ForkJoinTasks.defaultForkJoinPool._ 
val old = getParallelism 
setParallelism(K) 
val result = myArray.par.map(...) // process the array in parallel 
setParallelism(old) 

你會如何建議過程中Scala 2.9K元素並行處理這樣的陣列?

回答

1

setParallelism方法設置並行集合的fork/join池應該使用的並行worker的建議數量。這些K工作人員可以在收集的任何部分工作 - 由調度員決定將工人分配給哪些元素。

如果您想包括在並行操作僅第一K元素,你應該使用take方法,其次是map

myArray.par.take(K).map(...) 

您也可以使用view.take(K).map(...).force做之前創建一個平行視圖映射。

+0

謝謝。你能否詳細說一下使用'view'? – Michael

+1

觀點背後的想法是推遲評估中間集合,否則將使用'take','map'或'filter'在內存中創建集合,直到集合被強制執行爲止。由於某些抽象懲罰和間接指導,這可能會或可能不會提高性能,具體取決於轉換的內容。你可以在這裏閱讀更多關於它的內容:http://docs.scala-lang.org/overviews/collections/views.html – axel22