Come configurare un pool di thread ottimizzato per i future?

Quanto è grande il pool di thread di Scala per i futures?

La mia applicazione Scala fa molti milioni di future {} e mi chiedo se c’è qualcosa che posso fare per ottimizzarli configurando un pool di thread.

Grazie.

Puoi specificare il tuo ExecutionContext in cui verrà eseguito il tuo futuro, invece di importare l’implicito implicito globale di ExecutionContext.

 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) {} } 

Questa risposta proviene da monkjack, un commento dalla risposta accettata. Tuttavia, si può perdere questa grande risposta, quindi sto ripubblicando qui.

 implicit val ec = ExecutionContext.fromExecutor(Executors.newFixedThreadPool(10)) 

Se hai solo bisogno di modificare il conteggio del pool di thread, usa l’executor globale e passa le seguenti proprietà di sistema.

 -Dscala.concurrent.context.numThreads=8 -Dscala.concurrent.context.maxThreads=8 

il modo migliore per specificare threadpool in scala futuri:

 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(); }