Akka control threadpool thread - PullRequest
       11

Akka control threadpool thread

1 голос
/ 28 июля 2011

Потенциально очень глупый вопрос -

Можно ли настроить актеров Akka / Scala таким образом, чтобы вы контролировали потоки, используемые актерами? например Вы можете инициализировать свой собственный набор потоков, которые будут использоваться в пуле потоков, или иным образом контролировать / изменять потоки?

Ответы [ 2 ]

4 голосов
/ 28 июля 2011

В Akka пул потоков управляется с помощью экземпляра MessageDispatcher.Вы можете легко настроить диспетчера для актеров:

class MyActor( dispatcher: MessageDispatcher ) extends Actor {
  self.dispatcher = dispatcher
  ...
}

Чтобы предоставить свой собственный диспетчер, вы можете расширить akka.dispatch.MessageDispatcher (см. Примеры реализации существующих диспетчеров).Здесь вы можете играть непосредственно с потоками.

Конечно, помещать бизнес-логику в диспетчер опасно, потому что это может нарушить модель актора и увеличить количество ошибок параллелизма ...

0 голосов
/ 04 августа 2011

Я пытался понять это сам, но кажется, что парни в Akka не хотят, чтобы управление потоками было открыто для общественности.

ThreadPoolConfig - класс, который отвечает за создание ExecutorService instance это класс case с методом createExecutorService (), объявленным final !

  final def createExecutorService(threadFactory: ThreadFactory): ExecutorService = {
    flowHandler match {
      case Left(rejectHandler) ⇒
        val service = new ThreadPoolExecutor(...)
        service
      case Right(bounds) ⇒
        val service = new ThreadPoolExecutor(...)
        new BoundedExecutorDecorator(service, bounds)
    }
  }

Итак, я не вижу простых способов предоставить свой собственный ExecutorService.

...