eventloop
работает аналогично комбинации loop
и react
.Разница между loop
и eventloop
заключается в том, что loop
, на самом деле, не вызывает рекурсивно тело (для предотвращения переполнения стека для основанных на потоках субъектов), а планирует обработку (реагирование / получение) следующего сообщенияиз почтового ящика и завершает выполнение текущего обработчика, выдавшего исключение, чтобы очистить стек вызовов.
eventloop
рекурсивно обрабатывает сообщения, используя react
- в случае react
это безопасно (и стек не переполняется), потому что тело react
(но не receive
!) всегда заканчивается исключением, в большинстве случаев и запланированным следующим циклом, чтобы гарантировать справедливый доступ к пулу потоков от всех участников.Поэтому eventloop
можно использовать только с актерами, управляемыми событиями.
import scala.actors._
import Actor._
class EventLoop extends Actor {
def act = eventloop{
case msg => println("Received " + msg)
}
}