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.

Evans Y.
quelle
1
Scala-Schauspieler werden jetzt zugunsten von Akka-Schauspielern abgelehnt. Warum also die Mühe machen? :) goo.gl/VaPOu
Gian Marco
Ab dem Beginn Scala 2.10wurde die scala.actorsBibliothek zugunsten der Akka-Schauspieler veraltet.
Johnny

Antworten:

59

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.

Alexey Romanov
quelle
6
Das durch die akzeptierte Antwort verknüpfte Vergleichs-PDF scheint nicht mehr verfügbar zu sein. Hier ist ein Vergleich von einem der Akka-Entwickler: akka.io/docs/misc/Comparison_between_4_actor_frameworks.pdf
Frank
7
Ihr Link ist auch 404. Dies funktioniert derzeit: doc.akka.io/docs/misc/Comparison_between_4_actor_frameworks.pdf
Gian Marco
32

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.

Dan Bergh Johnsson
quelle
2
Ja, die Scala Actors-Bibliothek ist bereits in 2.11 docs.scala-lang.org/overviews/core/actors-migration-guide.html
anshumans
7

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.

Dan Bergh Johnsson
quelle