我know你可以设置用于所有.par操作的线程数,如下所示:
collection.parallel.ForkJoinTasks.defaultForkJoinPool.setParallelism(parlevel: Int)
但是,是否可以设置仅用于一次.par调用的线程数?
答案 0 :(得分:15)
您可以创建一个设置并行度级别的块,然后在该块中执行特定方法:
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)
}
答案 1 :(得分:14)
在Scala 2.11中,您应该使用并行收集任务支持,如下所示:
parallelCollection.tasksupport = new ForkJoinTaskSupport(
new scala.concurrent.forkjoin.ForkJoinPool(parlevel))
parallelCollection.map( ... )
请参阅任务支持documentation