Актер Akka, который все еще работает, ожидая новых сообщений? - PullRequest
3 голосов
/ 29 декабря 2011

Я новичок в Akka и заранее прошу прощения, если это основной вопрос. Я не уверен, как использовать актеров для реализации следующего сценария, или если это вообще возможно (или желательно).

  • У меня есть ряд субъектов (то есть производителей), ответственных за одновременное поддержание определенных частей состояния, каждый из которых уведомляет другого субъекта (т.е. потребителя), когда происходят изменения.
  • Потребитель должен многократно запускать определенную задачу, которая требует запуска состояния от всех производителей. Он также должен реагировать на изменения в состоянии, когда он получает сообщения от производителей.

Прежде чем рассмотреть Akka, я бы как бы прокрутил свою собственную простую модель актера, где каждый актер работал в своем собственном потоке. Методы run () будут отслеживать очередь событий, поэтому я мог бы потребителю постоянно делать что-то похожее на это:

while not done
    poll the event queue
    if something was polled
        process the event
    if all state is available
        do one step of the long running task

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

Есть ли лучший способ использовать акторов Akka для реализации этого? Я мог бы реализовать «сердцебиение», которое отправляет сообщение потребителю (или отправляется внутри потребителю самостоятельно), чтобы сделать еще один шаг долгосрочной задачи, но мне не нравится мысль о ее планировании, поскольку шаги в долгосрочной задаче не одинаковы по продолжительности. Я не хочу ставить в очередь итерации, которые слишком заняты, чтобы не отвечать на сообщения от производителя. Но я также не хочу планировать это слишком редко, поэтому он бездействует, когда он может прогрессировать ...

Или было бы более уместным использовать для этого модель параллелизма потока данных (то, к чему я только готов)? Потребитель не может начать, пока состояние не будет полностью связано, поэтому кажется Естественно определить процесс в терминах переменных потока данных. Но если переменные потока данных могут быть связаны только один раз, это не подходит для получения повторных обновлений состояния от потребителей.

1 Ответ

2 голосов
/ 30 декабря 2011

Производители могут публиковать изменения в Akka EventBus и иметь регистр потребителя для прослушивания этих событий, а затем, когда у него есть все, что нужно, он может обработать полный кусок или порождать его.новый актер, который обрабатывает полные куски.

...