Как настроить актера Scala для работы исключительно с отдельным потоком? - PullRequest
3 голосов
/ 08 ноября 2011

Насколько я понимаю, Scala управляет пулом потоков для запуска актеров, разделяя потоки между ними.Могу ли я настроить конкретного актера для работы исключительно в отдельном потоке, никогда не передавая его другому актеру?

1 Ответ

2 голосов
/ 08 ноября 2011

Похоже, вы используете актеров Scala (не Akka). В этом случае, если вы используете стиль обработки сообщений receive или receiveWithin, тогда каждый субъект получит свой собственный поток. Использование стиля обработки сообщений react разделяет пул потоков между участниками.

Когда я говорю receive "стиль", я имею в виду в цикле, например:

val timerActor = actor { 
  while (true) {
    receiveWithin(60 * 1000) {
       case Stop => self.exit()
       case TIMEOUT =>
          destination ! Tick
    }
  }
}

В этом случае timerActor не делится своей нитью с любым другим актером. receiveWithin будет блокироваться, пока актер не получит сообщение Стоп или не пройдет 60 секунд. Если прошло 60 секунд, выполняется случай TIMEOUT.

Если вы хотите узнать мельчайшие подробности об актерах Scala, посмотрите статью Актеры, объединяющие потоки и события .

Akka также поддерживает акторов на основе потоков в дополнение к акторам на основе событий.

...