web-dev-qa-db-fra.com

Comment configurer un pool de threads affiné pour les futures?

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.

75
user972946

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) {}
}
86
Josh Gao

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
136
Bienvenido David

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();
    }
3
S'chn T'gai Spock