Avec le tronc le plus récent, en utilisant la JVM 1.6 ou plus récente, utilisez l'option :
collection.parallel.ForkJoinTasks.defaultForkJoinPool.setParallelism(parlevel: Int)
Cela peut toutefois faire l'objet de modifications à l'avenir. Une approche plus unifiée de la configuration de toutes les API parallèles de Scala est prévue pour les prochaines versions.
Notez cependant que si cela détermine le nombre de processeurs utilisés par la requête, ce n'est pas forcément le nombre réel de threads impliqués dans l'exécution d'une requête. Étant donné que les collections parallèles prennent en charge le parallélisme imbriqué, l'implémentation réelle du pool de threads peut allouer plus de threads pour exécuter la requête si elle détecte que cela est nécessaire.
EDIT :
À partir de Scala 2.10, la manière préférée de définir le niveau de parallélisme est de définir l'attribut tasksupport
à un nouveau champ TaskSupport
comme dans l'exemple suivant :
scala> import scala.collection.parallel._
import scala.collection.parallel._
scala> val pc = mutable.ParArray(1, 2, 3)
pc: scala.collection.parallel.mutable.ParArray[Int] = ParArray(1, 2, 3)
scala> pc.tasksupport = new ForkJoinTaskSupport(new scala.concurrent.forkjoin.ForkJoinPool(2))
pc.tasksupport: scala.collection.parallel.TaskSupport = scala.collection.parallel.ForkJoinTaskSupport@4a5d484a
scala> pc map { _ + 1 }
res0: scala.collection.parallel.mutable.ParArray[Int] = ParArray(2, 3, 4)
Pendant l'instanciation de la ForkJoinTaskSupport
avec un fork join pool, le niveau de parallélisme du fork join pool doit être défini à la valeur souhaitée ( 2
dans l'exemple).