Mit der Veröffentlichung von Scala 2.9.0 wurde auch der Typesafe Stack angekündigt, der die Scala-Sprache mit dem Akka-Framework kombiniert. Obwohl Scala Schauspieler in seiner Standardbibliothek hat, verwendet Akka jetzt eine eigene Implementierung. Und wenn wir nach anderen Implementierungen suchen, werden wir auch feststellen, dass Lift und Scalaz auch Implementierungen haben!
Was ist der Unterschied zwischen diesen Implementierungen?
Antworten:
Diese Antwort ist nicht wirklich meine. Es wurde von Viktor Klang (von Akka) mit Hilfe von David Pollak (von Lift), Jason Zaugg (von Scalaz) und Philipp Haller (von Scala Actors) produziert.
Alles, was ich hier mache, ist das Formatieren (was einfacher wäre, wenn Stack Overflow Tabellen unterstützt).
Es gibt einige Stellen, die ich später besetzen werde, wenn ich mehr Zeit habe.
Grundsätze für die Gestaltung
Scalaz Schauspieler
Minimale Komplexität. Maximale Allgemeinheit, Modularität und Erweiterbarkeit.
Schauspieler anheben
Minimale Komplexität, Garbage Collection durch JVM, anstatt sich um einen expliziten Lebenszyklus zu sorgen, Fehlerbehandlungsverhalten im Einklang mit anderen Scala- und Java-Programmen, geringer / geringer Speicherbedarf, Postfach, statisch ähnlich wie bei Scala Actors und Erlang-Akteuren, hohe Leistung.
Scala-Schauspieler
Stellen Sie das vollständige Erlang-Darstellermodell in Scala bereit, mit geringem Gewicht und geringem Speicherbedarf.
Akka Schauspieler
Einfach und transparent verteilbar, leistungsstark, leicht und äußerst anpassungsfähig.
Versionierung
Unterstützung für Schauspieler-Modelle
Grad der staatlichen Isolation
Wenn der Benutzer öffentliche Methoden für seine Akteure definiert, können diese von außen aufgerufen werden?
Schauspielertyp
Actor[A] extends A => ()
LiftActor
,SpecializeLiftActor[T]
Reactor[T]
,Actor extends Reactor[Any]
Actor[Any]
Actor Lifecycle Management
Nachrichtensende-Modi
(1) Jede Funktion f wird zu einem solchen Akteur:
val a: Msg => Promise[Rep] = f.promise val reply: Rep = a(msg).get
(2) Jede Funktion f wird zu einem solchen Akteur:
val a = f.promise val replyFuture = a(message)
(3) Kontravarianter Funktor :
actor comap f
. Auch Kleisli Komposition inPromise
.Nachrichtenantwortmodi
TBD
Nachrichtenverarbeitung
Unterstützt verschachtelte Empfänge?
Mechanismus zur Ausführung von Nachrichten
TBD
Distribution / Remote Actors
Howtos
TBD
quelle
scala.actors war der erste ernsthafte Versuch, die Parallelität im Erlang-Stil in Scala zu implementieren, der andere Bibliotheksdesigner dazu inspiriert hat, bessere (in einigen Fällen) und leistungsfähigere Implementierungen vorzunehmen . Das größte Problem (zumindest für mich) ist, dass scala.actors im Gegensatz zu Erlang-Prozessen, ergänzt durch OTP (das das Erstellen fehlertoleranter Systeme ermöglicht), nur eine gute Grundlage bieten, eine Reihe stabiler Grundelemente , die zum Erstellen verwendet werden müssen ein übergeordnetes Framework - am Ende des Tages müssen Sie Ihre eigenen Vorgesetzten, Kataloge von Akteuren, endlichen Zustandsmaschinen usw. über die Akteure schreiben.
Und hier kommt Akka zur Rettung und bietet einen umfassenden Stack für die akteurbasierte Entwicklung: idiomatischere Akteure, eine Reihe von Abstraktionen auf hoher Ebene für die Koordination (Load Balancer, Akteurspools usw.) und den Aufbau fehlertoleranter Systeme (Supervisors) , portiert von OTP usw.), einfach konfigurierbare Scheduler (Dispatcher) und so weiter. Tut mir leid, wenn ich unhöflich klinge, aber ich denke, es wird keine Zusammenführung in 2.9.0+ geben - ich würde eher erwarten, dass Akka- Schauspieler die stdlib-Implementierung schrittweise ersetzen.
Scalaz . Normalerweise habe ich diese Bibliothek in der Liste der Abhängigkeiten aller meiner Projekte, und wenn ich aus irgendeinem Grund Akka nicht verwenden kann, speichern nicht blockierende Scalaz-Versprechen (mit all der Güte, wie
sequence
) in Kombination mit den Standarddarstellern die Tag. Ich habe Scalaz- Schauspieler jedoch nie als Ersatz für scala.actors oder Akka verwendet .quelle
Schauspieler: Scala 2.10 gegen Akka 2.3 gegen Lift 2.6 gegen Scalaz 7.1
Prüfregeln und Ergebnisse für die durchschnittliche Latenzzeit und Durchsatz auf JVM 1.8.0_x.
quelle