Scalaの先物のスレッドプールはどれくらいの大きさですか?
My Scalaアプリケーションは数百万のfuture {}
sそして、スレッドプールを構成することで最適化するためにできることはないかと思います。
ありがとうございました。
グローバルな暗黙的なExecutionContextをインポートする代わりに、futureが実行される独自の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) {}
}
この回答は、受け入れられた回答からのコメントであるmonkjackからのものです。ただし、このすばらしい回答を見逃す可能性があるため、ここに再投稿しています。
implicit val ec = ExecutionContext.fromExecutor(Executors.newFixedThreadPool(10))
スレッドプール数を変更するだけの場合は、グローバルエグゼキュータを使用して、次のシステムプロパティを渡すだけです。
-Dscala.concurrent.context.numThreads=8 -Dscala.concurrent.context.maxThreads=8
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();
}