Как установить количество потоков, используемых для параметра
I знать, что вы можете установить количество потоков для всех операций .par, например:
collection.parallel.ForkJoinTasks.defaultForkJoinPool.setParallelism(parlevel: Int)
Но можно ли установить количество потоков для использования только для одного вызова .par?
Ответы
Ответ 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( ... )
См. поддержку справки