Подтвердить что ты не робот

Как установить количество потоков, используемых для параметра

I знать, что вы можете установить количество потоков для всех операций .par, например: collection.parallel.ForkJoinTasks.defaultForkJoinPool.setParallelism(parlevel: Int)

Но можно ли установить количество потоков для использования только для одного вызова .par?

4b9b3361

Ответ 1

Вы можете создать блок, который устанавливает уровень parallelism, а затем выполнить определенные методы в этом блоке:

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)
}

Ответ 2

В Scala 2.11 вам следует использовать поддержку параллельных коллекций, например:

parallelCollection.tasksupport = new ForkJoinTaskSupport(
    new scala.concurrent.forkjoin.ForkJoinPool(parlevel))

parallelCollection.map( ... )

См. поддержку справки