我know,您可以設置線程數來使用,像這樣所有.PAR操作: collection.parallel.ForkJoinTasks.defaultForkJoinPool.setParallelism(parlevel: Int)
如何設置線程數使用標準桿
但是,它可以設置線程數只用一個.par調用?
我know,您可以設置線程數來使用,像這樣所有.PAR操作: collection.parallel.ForkJoinTasks.defaultForkJoinPool.setParallelism(parlevel: Int)
如何設置線程數使用標準桿
但是,它可以設置線程數只用一個.par調用?
您可以創建一個設置並行級別的塊,然後在該塊內執行的具體方法:
def withParallelism[A](n : Int)(block : => A) : A = {
import collection.parallel.ForkJoinTasks.defaultForkJoinPool._
val defaultParLevel = getParallelism
setParallelism(n)
val ret = block
setParallelism(defaultParLevel)
ret
}
然後調用它是這樣:
withParallelism(2) {
(1 to 100).par.map(_ * 2)
}
看起來像它改變了一些全球狀態... – tuxSlayer 2012-02-08 23:13:37
I不喜歡它改變全球狀態的事實 – 2016-11-17 15:57:44
在斯卡拉2.11,你應該使用並行採集任務支持,如下所示:
parallelCollection.tasksupport = new ForkJoinTaskSupport(
new scala.concurrent.forkjoin.ForkJoinPool(parlevel))
parallelCollection.map(...)
查看任務支持documentation
我想你可以爲此創建一個單獨的池,但我認爲此刻不支持。 – 2012-02-06 14:23:16
這在2.10中不起作用。 – 2013-01-08 03:13:30
[scala並行集合並行度]的可能重複(http://stackoverflow.com/questions/5424496/scala-parallel-collections-degree-of-parallelism) – 2013-11-12 14:27:13