2010-07-28 8 views
65

Es gibt so viele verschiedene Actor model Implementierungen für Java (und die JVM-Sprachen).Welche Akteur Modellbibliothek/Framework für Java?

Viele Schauspieler Bibliotheken und Frameworks implementiert wurden Actor-Stil Programmierung in Java zu ermöglichen (die Schauspieler hat nicht eingebaut). Ich denke, das Actor-Modell hat große Vorteile, aber die Auswahl für Java ist überwältigend!

Kann jemand die beliebtesten posten und einen Einblick in die Verwendung geben? Welche haben Benchmarks für den Durchsatz in Bezug auf Nachrichten pro Sekunde?

+3

Sieh nicht, wie es ein Duplikat von http://StackOverflow.com/Questions/436050/Events-in-Java ist, außer dass eine der Antworten "Schauspieler" war. Und der erste war irgendwie tot (keine Erwähnung von Kilim, Akka oder Jetlang). –

+0

Suche auch nach "[java] aktoren" – oluies

+2

Ich habe eine neue coole: https://github.com/RuedigerMoeller/kontraktor –

Antwort

60

This ist eine gute Artikelserie. Siehe auch this Präsentation. Carl Hewitt erklärt das Wesen des Actor-Modells der Berechnung here.

Killim und Akka (scala) hat die beste Leistung. Ich würde vorschlagen, Akka zu verwenden. Starting with Scala 2.11.0, die Scala Actors-Bibliothek ist veraltet. Bereits in Scala 2.10.0 ist die Standard-Actor-Bibliothek Akka. Verwenden Sie akka als Frontend und rufen Sie Ihren Java-Code, wenn Sie nicht die gesamte Codierung in Scala tun möchten. Scala und Akka hat eine sehr schöne Syntax und API. Akka hat eine Java-API namens "Active Objects". Beachten Sie, dass in Akka gerade eine Menge passiert, so dass sich die Code-Basis schnell entwickelt. Siehe Java getting started doc

Killim ist Java-basiert, sondern braucht Zeit Weben kompilieren.

Jetlang und FunctionalJava sind Optionen, die nicht kompilieren lässt keine Zeit Weben (?? unsicher), ist aber nicht so schnell wie Akka und Killim (keine aktuellen Daten auf diesem, aber es gibt einige alte Nummern in Jonas Boners and Viktor Klangs talk at Scala Days 2010).

Andere Optionen werden mit regulärer JMS (oder eine andere MQ/PubSub). Auch könnten Sie your own simple intra JVM Publikation Kanäle/Arbeiter tun. Oder benutzen Sie einfach java util concurrent ExecutorService oder com.google.common.util.concurrent

Andere Scala basierten Frameworks/Bibliotheken mit Schauspieler-Implementierungen sind Stambecco, Lift und Scalaz. Weitere ähnliche Modelle sind Hazlecast Distributed Executor Service, Oracle Coherence mit dem InvocableService, GigaSpaces Executors oder IBM eXtreme Scale. Aber diesen fehlt der Teil "Akteure sind Systeme" in gewissem Maße.

+4

Erwähnenswert ist auch, dass Akka eine Java-API (Active Objects) hat –

+1

hinzufügen Reaktor und RxJava –

+2

auch vert.x –

1

Die Scala Actors ist mein bester Vorschlag.

Siehe http://www.scala-lang.org/node/242 für eine kurze Anleitung.

+0

Können Scala Actors in Java verwendet werden? (Ich schätze immer noch Antworten, die die JVM verwenden.) –

+2

Scala ist eine 100% JVM-kompatible Sprache, also, Ja, Sie können es in Java verwenden. –

+1

Ich denke, du solltest sagen "benutze es mit Java". Es ist zB einfach, Java von Scala aus anzurufen und Scala von Java aus anzurufen. Aber es ist irgendwie nur eine andere Jar-Datei: http://blog.lostlake.org/index.php?/archives/73-For-all-you-know,-its-just-another-Java-library. html – oluies

9

Wir haben eine verwandte Studie mit dem Titel "Akteur Frameworks für die JVM-Plattform: Eine vergleichende Analyse", die im vergangenen Jahr veröffentlicht wurde und vergleicht die Syntax, Semantik und Leistung einiger der JVM-basierten Actor-Frameworks. Es ist verfügbar unter https://www.researchgate.net/profile/Gul_Agha/publication/221302944_Actor_frameworks_for_the_JVM_platform/links/55aeb2df08aed614b09a775c.pdf?origin=publication_detail. Ich hoffe, Sie finden es nützlich.

+1

Möchten Sie kommentieren, was seitdem passiert ist? –

1

Nun, ich war auf der Suche nach einer guten Schauspieler Umsetzung in Scala, und schaute auf beide native Scala und Akka. Ich fand beide übermäßig komplex. Dann fand ich Lift Actors, die ich einfach, elegant und gut gestaltet fand. Alle oben genannten sind von Java (über Java-freundliche benannte Methoden) verwendbar.

Diskussion auf: http://erikengbrecht.blogspot.com/2009/06/pondering-actor-design-trades.html

Download unter: http://liftweb.net/

Sie müssen nur Lift-Schauspieler _ ?. Glas und heben-common _ ?. Glas vom Lift-Downloads (plus Scala std lib). Werfen Sie einen Blick auf die Lift Actors Scala Quelle: sehr ordentlich.

11

Jumi Actors ist eine Actor-Bibliothek für Java. Es wurde entwickelt, um in Java-Code natürlich verwendet zu werden - Sie müssen keine Klasse für jede Nachricht erstellen, aber Nachrichten werden als Methoden an einer Schnittstelle dargestellt. Auch seine Akteure sind Müll gesammelt, so dass sie nicht explizit gestoppt werden müssen. Code, der Jumi Actors verwendet, ist testable, beide Einheiten können ohne den Actor-Container getestet werden, und die Integration kann mithilfe einer deterministischen Container-Implementierung mit einem Thread getestet werden.

Im Vergleich zu Akka Actors ist es viel kleiner in Binärgröße (33 KB vs 10+ MB) und viel schneller. Betrachtet man the Pi example in Akka Tutorial und the same example using Jumi Actors, dauert die Berechnung mit Akka etwa 480-520 ms, aber mit Jumi Actors nur 350-390 ms. (Der Unterschied wäre zweifellos noch größer, wenn die Akteure nicht arbeiten würden und wir nur die Nachrichtenübergabe messen würden.) Beim Startup-Vergleich dauert der Start des Akka-Containers 620 ms, der Start des Jumi Actors-Containers jedoch nur 25 ms.

3

Eine andere Option ist GPars. Groovy basiert, kann aber wie Java von Java aufgerufen werden.