Я новичок в 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 для реализации этого? Я мог бы реализовать «сердцебиение», которое отправляет сообщение потребителю (или отправляется внутри потребителю самостоятельно), чтобы сделать еще один шаг долгосрочной задачи, но мне не нравится мысль о ее планировании, поскольку шаги в долгосрочной задаче не одинаковы по продолжительности. Я не хочу ставить в очередь итерации, которые слишком заняты, чтобы не отвечать на сообщения от производителя. Но я также не хочу планировать это слишком редко, поэтому он бездействует, когда он может прогрессировать ...
Или было бы более уместным использовать для этого модель параллелизма потока данных (то, к чему я только готов)? Потребитель не может начать, пока состояние не будет полностью связано, поэтому кажется Естественно определить процесс в терминах переменных потока данных. Но если переменные потока данных могут быть связаны только один раз, это не подходит для получения повторных обновлений состояния от потребителей.