Quelle est la taille du pool de threads de Scala pour les futures?
Mon Scala fait plusieurs millions de future {}
s et je me demande si je peux faire quelque chose pour les optimiser en configurant un pool de threads.
Merci.
Vous pouvez spécifier votre propre ExecutionContext dans lequel vos futures s'exécuteront, au lieu d'importer le ExecutionContext implicite global.
import Java.util.concurrent.Executors
import scala.concurrent._
implicit val ec = new ExecutionContext {
val threadPool = Executors.newFixedThreadPool(1000)
def execute(runnable: Runnable) {
threadPool.submit(runnable)
}
def reportFailure(t: Throwable) {}
}
Cette réponse est de monkjack, un commentaire de la réponse acceptée. Cependant, on peut manquer cette excellente réponse, donc je la republie ici.
implicit val ec = ExecutionContext.fromExecutor(Executors.newFixedThreadPool(10))
Si vous avez juste besoin de changer le nombre de threads, utilisez simplement l'exécuteur global et transmettez les propriétés système suivantes.
-Dscala.concurrent.context.numThreads=8 -Dscala.concurrent.context.maxThreads=8
meilleure façon de spécifier threadpool dans scala futures:
implicit val ec = new ExecutionContext {
val threadPool = Executors.newFixedThreadPool(conf.getInt("5"));
override def reportFailure(cause: Throwable): Unit = {};
override def execute(runnable: Runnable): Unit = threadPool.submit(runnable);
def shutdown() = threadPool.shutdown();
}