Как установить количество потоков, чтобы использовать для номинала - PullRequest
15 голосов
/ 06 февраля 2012

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

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

Ответы [ 2 ]

16 голосов
/ 06 февраля 2012

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

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)
}
15 голосов
/ 20 февраля 2015

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

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

parallelCollection.map( ... )

См. Поддержку задач документация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...