Meist verwendet akka primitiv Actor - irgendwelche Zustandsänderungen oder Zustandsabfragen werden ausschließlich über Asynchron-Nachrichten erfolgen.akka: Kombination von Schauspieler und Agenten
Akka stellt auch das weniger bekannte Primitiv Agent zur Verfügung, das asynchron durch einen neuen Wert aktualisiert wird (oder durch eine Funktion, die seinen Wert modifiziert) und synchron von jedem Thread gelesen werden kann.
Frage: In Single-JVM Schauspieler System, wie diese Ansätze kombinieren: haben primitive, die von Asynchron aktualisiert wird. nur Nachrichten (wie Actor
), aber welcher Zustand kann direkt in thread-sicherer Weise (wie Agent
) gelesen werden?
Ich würde wirklich schätzen Verbindung zu jeder relevanten Diskussion/Projekt/Probe.
Lösungen die ich bisher gefunden:
- offensichtliche Möglichkeit ist
Actor
zu haben, dieAgent
in aktualisiert. Aber ich frage mich, ob es elegantere & performante Lösung gibt. - Scalaz Agent, aber eine Lösung ohne Scalaz-Abhängigkeit wäre bevorzugt.
- Halbwegs schmutzige Lösung: Pause
Actor
Trennung durch Veröffentlichung (in ausgehenden Nachricht) -Funktion zum Lesen des Status des Schauspielers, ähnlichAgent.get()
. Die Fadensicherheit muss manuell sichergestellt werden. - Work around: lassen Sie
Actor
aktualisieren einige externe freigegebenen Zustand in . Die Fadensicherheit muss manuell sichergestellt werden.