Как настроить тонкую пул потоков для фьючерсов?

Насколько велик пул потоков Scala для фьючерсов?

В моем приложении Scala много миллионов future {}, и мне интересно, есть ли что-нибудь, что я могу сделать, чтобы оптимизировать их, настроив пул потоков.

Спасибо.

Ответ 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) {}
}

Ответ 2

Этот ответ от monkjack, комментарий от принятого ответа. Тем не менее, можно пропустить этот отличный ответ, поэтому я переписываю его здесь.

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

Если вам просто нужно изменить счет пула потоков, просто используйте глобальный исполнитель и передайте следующие системные свойства.

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

Ответ 3

лучший способ указать threadpool в фреймах 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();
    }