如何设置用于par的线程数

时间:2012-02-06 01:26:15

标签: scala parallel-processing

know你可以设置用于所有.par操作的线程数,如下所示: collection.parallel.ForkJoinTasks.defaultForkJoinPool.setParallelism(parlevel: Int)

但是,是否可以设置仅用于一次.par调用的线程数?

2 个答案:

答案 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