Was ist der Unterschied zwischen dem Akka-Schauspieler und dem Scala-Schauspieler-Modell?
76
Ich habe festgestellt, dass es auch ein Akka-Schauspielermodell gibt, also frage ich mich, was der Unterschied zwischen dem Akka-Schauspieler- und dem Scala-Schauspieler-Modell ist.
Es gibt auch eine historische Antwort. Die Macher von Scala waren der Meinung, dass es einen Rahmen für Schauspieler geben sollte. Jonas Bonér probierte es aus, war aber nicht ganz zufrieden und begann an einem neuen zu arbeiten - der sich zu Akka entwickelte. Die Scala-Leute dachten jedoch, es sei besser als ihre eigenen - und kündigten auf der Jfokus 2011 an, dass Akka das Standard-Schauspieler-Framework von Scala werden sollte. Diese Migration wird jedoch einige Zeit dauern.
Dies hängt ein wenig davon ab, was Sie mit "Modell" meinen - Sie können sich entweder auf das "Ausführungsmodell" oder das "Programmiermodell" (und möglicherweise auch auf andere Modelle) beziehen.
Für Ausführungsmodelle gibt es grundsätzlich zwei: Thread-basiert oder Ereignis-basiert. Die Scala-Standardschauspielerbibliothek enthält beides. Der Thread-basierte verwendet einen Thread für jeden Akteur, während der ereignisbasierte einen Thread-Pool verwendet. Ersteres ist intuitiver zu verstehen, letzteres ist effizienter. Akka basiert auf dem ereignisbasierten Modell.
Für das Programmiermodell gibt es einen großen Unterschied zwischen der Scala-Standardbibliothek und Akka. In der Scala-Standardbibliothek implementieren Sie grundsätzlich die Methode "Ausführen" - und wenn Sie auf eine eingehende Nachricht warten möchten, geraten Sie in einen Wartezustand (indem Sie "Empfangen" oder "Reagieren" aufrufen). Das Programmiermodell folgt also der "Thread-Metapher". In Akka lautet die Programmiermetapher jedoch, dass Sie einige Lebenszyklusmethoden implementieren - die "run" -Methode ist jedoch im Framework geschrieben. Es stellt sich tatsächlich heraus, dass dieses Programmiermodell auch mit dem ereignisbasierten Ausführungsmodell viel besser funktioniert.
Wenn Sie in den verschiedenen Ausführungsmodellen und Programmiermodelle von SCALA Standard Akteuren interessiert sind ich geschrieben habe ein paar Beiträge zu diesem Thema.
Scala 2.10
wurde diescala.actors
Bibliothek zugunsten der Akka-Schauspieler veraltet.Antworten:
Nun, das gibt es nicht. Es gibt nur ein Schauspieler-Modell, und Akka-Schauspieler und Scala-Schauspieler sind zwei Implementierungen dieses Modells.
Alle Actor-Modelle besagen, dass Ihre Parallelitätsprimitive Akteure sind, die:
Empfangen Sie eine Nachricht und entscheiden Sie, was als Nächstes zu tun ist, abhängig vom Inhalt der Nachricht, einschließlich:
Senden Sie Nachrichten an alle Akteure, die sie kennen
neue Schauspieler schaffen
und bietet bestimmte Garantien, z.
Jeder Akteur verarbeitet jeweils nur eine Nachricht
Nachrichten, die von Schauspieler X an Schauspieler Y gesendet werden, kommen in der Reihenfolge an, in der sie gesendet wurden
Auf dieser Ebene gibt es keinen Unterschied zwischen Scala- und Akka-Schauspielern.
Für Unterschiede in dem, was sie tun können, finden verschiedene Scala Schauspieler Implementations Übersicht . Das Größte für mich ist, dass Akka Supervisors und ActorRegistry unterstützt.
quelle
Es gibt auch eine historische Antwort. Die Macher von Scala waren der Meinung, dass es einen Rahmen für Schauspieler geben sollte. Jonas Bonér probierte es aus, war aber nicht ganz zufrieden und begann an einem neuen zu arbeiten - der sich zu Akka entwickelte. Die Scala-Leute dachten jedoch, es sei besser als ihre eigenen - und kündigten auf der Jfokus 2011 an, dass Akka das Standard-Schauspieler-Framework von Scala werden sollte. Diese Migration wird jedoch einige Zeit dauern.
quelle
Dies hängt ein wenig davon ab, was Sie mit "Modell" meinen - Sie können sich entweder auf das "Ausführungsmodell" oder das "Programmiermodell" (und möglicherweise auch auf andere Modelle) beziehen.
Für Ausführungsmodelle gibt es grundsätzlich zwei: Thread-basiert oder Ereignis-basiert. Die Scala-Standardschauspielerbibliothek enthält beides. Der Thread-basierte verwendet einen Thread für jeden Akteur, während der ereignisbasierte einen Thread-Pool verwendet. Ersteres ist intuitiver zu verstehen, letzteres ist effizienter. Akka basiert auf dem ereignisbasierten Modell.
Für das Programmiermodell gibt es einen großen Unterschied zwischen der Scala-Standardbibliothek und Akka. In der Scala-Standardbibliothek implementieren Sie grundsätzlich die Methode "Ausführen" - und wenn Sie auf eine eingehende Nachricht warten möchten, geraten Sie in einen Wartezustand (indem Sie "Empfangen" oder "Reagieren" aufrufen). Das Programmiermodell folgt also der "Thread-Metapher". In Akka lautet die Programmiermetapher jedoch, dass Sie einige Lebenszyklusmethoden implementieren - die "run" -Methode ist jedoch im Framework geschrieben. Es stellt sich tatsächlich heraus, dass dieses Programmiermodell auch mit dem ereignisbasierten Ausführungsmodell viel besser funktioniert.
Wenn Sie in den verschiedenen Ausführungsmodellen und Programmiermodelle von SCALA Standard Akteuren interessiert sind ich geschrieben habe ein paar Beiträge zu diesem Thema.
quelle