Как настроить тонкую пул потоков для фьючерсов?
Насколько велик пул потоков 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();
}