Ich habe Akka (Java API) ausprobiert. Ich habe versucht, Akkas schauspielerbasiertes Parallelitätsmodell mit dem des einfachen Java-Parallelitätsmodells (java.util.concurrent-Klassen) zu vergleichen.
Der Anwendungsfall war eine einfache kanonische Karte, die die Implementierung der Zeichenanzahl reduzierte. Der Datensatz bestand aus einer Sammlung zufällig generierter Zeichenfolgen (400 Zeichen lang) und berechnete die Anzahl der darin enthaltenen Vokale.
Für Akka habe ich einen BalancedDispatcher (zum Lastausgleich zwischen Threads) und RoundRobinRouter (um meine Funktionsakteure einzuschränken) verwendet. Für Java habe ich eine einfache Fork-Join-Technik verwendet (implementiert ohne einen Algorithmus zum Stehlen von Arbeit), mit der die Ausführungen gegabelt / reduziert und die Ergebnisse verknüpft werden. Zwischenergebnisse wurden in Blockierungswarteschlangen gespeichert, um selbst die Verbindung so parallel wie möglich zu gestalten. Wenn ich mich nicht irre, würde das wahrscheinlich das "Mailbox" -Konzept der Akka-Schauspieler nachahmen, bei denen sie Nachrichten empfangen.
Beobachtung: Bis zu mittleren Lasten (~ 50000 String-Eingabe) waren die Ergebnisse vergleichbar und variierten geringfügig in verschiedenen Iterationen. Wenn ich jedoch meine Last auf ~ 100000 erhöhte, blieb die Java-Lösung hängen. Ich habe die Java-Lösung unter dieser Bedingung mit 20 bis 30 Threads konfiguriert und sie ist in allen Iterationen fehlgeschlagen.
Das Erhöhen der Last auf 1000000 war auch für Akka fatal. Ich kann den Code mit allen Interessierten teilen, um eine Gegenprüfung durchzuführen.
Für mich scheint Akka besser zu skalieren als herkömmliche Java-Multithread-Lösungen. Und wahrscheinlich ist der Grund die Magie von Scala unter der Haube.
Wenn ich eine Problemdomäne als ereignisgesteuerte Nachricht modellieren kann, die eine übergibt, ist Akka meiner Meinung nach eine gute Wahl für die JVM.
Test durchgeführt auf: Java Version: 1.6 IDE: Eclipse 3.7 Windows Vista 32 Bit. 3 GB RAM. Intel Core i5 Prozessor, Taktrate 2,5 GHz
Bitte beachten Sie, dass die für den Test verwendete Problemdomäne diskutiert werden kann und ich versucht habe, so fair zu sein, wie es meine Java-Kenntnisse zulassen :-)