如何为期货微调线程池?(How to configure a fine tuned thread p

2019-07-21 05:06发布

如何大是Scala的期货线程池?

我的斯卡拉应用,使数以百万计的future {} S和我不知道是否有什么我能做的通过配置一个线程池来优化它们。

谢谢。

Answer 1:

您可以指定自己的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) {}
}


Answer 2:

这个答案是从monkjack,从公认的答案评论。 然而,我们可以使我在这里重新张贴它错过这个伟大的答案。

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

如果你只需要改变线程池数,只需使用全球执行并通过以下系统属性。

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


Answer 3:

最好的方式来指定阶期货线程池:

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


文章来源: How to configure a fine tuned thread pool for futures?