2012-02-06 9 views
12

I know que se puede establecer el número de hilos de usar para todas las operaciones .par así: collection.parallel.ForkJoinTasks.defaultForkJoinPool.setParallelism(parlevel: Int)Cómo establecer el número de hilos de usar para el par

Pero, ¿es posible establecer el número de hilos para utilizar para una sola llamada .par?

+1

Supongo que podría crear un grupo separado para eso, pero no creo que sea compatible en este momento. –

+4

Esto ya no funciona en 2.10. –

+0

posible duplicado de [scala parallel collections grado de paralelismo] (http://stackoverflow.com/questions/5424496/scala-parallel-collections-degree-of-parallelism) –

Respuesta

15

Se puede crear un bloque que define el nivel de paralelismo y luego ejecutar métodos específicos dentro de ese bloque:

def withParallelism[A](n : Int)(block : => A) : A = { 
    import collection.parallel.ForkJoinTasks.defaultForkJoinPool._ 
    val defaultParLevel = getParallelism 
    setParallelism(n) 
    val ret = block 
    setParallelism(defaultParLevel) 
    ret 
} 

Y luego llamarlo como tal:

withParallelism(2) { 
    (1 to 100).par.map(_ * 2) 
} 
+11

parece que cambia algún estado global ... – tuxSlayer

+0

I no me gusta el hecho de que cambie el estado global –

13

En Scala 2.11 se debe utilizar compatibilidad con tareas de recopilación paralelas, como esta:

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

parallelCollection.map(...) 

Ver la compatibilidad de tareas documentation

Cuestiones relacionadas