В основном используется akka примитив Actor - любые изменения состояния или государственные запросы выполняются исключительно с помощью асинхронных сообщений.Akka: сочетание актера и агент
Akka также предоставляет менее известный примитив Agent, который обновляется асинхронно новым значением (или функцией, изменяющей его значение). Ans могут быть прочитаны синхронно из любого потока.
Вопрос: В одной JVM системы Актер, как совместить эти подходы: есть примитив, который обновляется в асинхронном. только сообщения (например, Actor
), но какое состояние может быть прочитано непосредственно в потокобезопасном режиме (например, Agent
) ?
Я бы очень признателен за ссылку на любой соответствующий вопрос/проект/образец.
Решения, которые я нашел до сих пор:
- Очевидная возможность состоит в том, чтобы иметь
Actor
обновляющий вAgent
. Но мне интересно, есть ли более элегантное решение &. - Scalaz Agent, но было бы предпочтительным решение без зависимостей scalaz.
- Полуостровное грязное решение: break
Actor
Разделение путем публикации (в исходящем сообщении) функции для чтения состояния актера, аналогичноAgent.get()
. Безопасность резьбы должна выполняться вручную. - Работать вокруг: дайте
Actor
обновить внешнее общее состояние в . Безопасность резьбы должна выполняться вручную.