如何configuration未来的微调线程池?

斯卡拉的期货线程池有多大?

我的Scala应用程序创造了数百万的future {} ,我想知道是否有任何事情可以通过configuration线程池来优化它们。

谢谢。

您可以指定您自己的ExecutionContext来运行您的期货,而不是导入全局隐式的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期货中指定线程池的最佳方式:

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