2010-07-28 16 views
65

Existen muchas implementaciones diferentes de Actor model para Java (y los lenguajes JVM).¿Qué biblioteca/marco modelo Actor para Java?

Se han implementado muchas bibliotecas y marcos Actor para permitir la programación estilo Actor en Java (que no tiene Actores incorporados). Creo que el modelo Actor tiene grandes ventajas, ¡pero las opciones para Java son abrumadoras!

¿Alguien puede publicar las más populares y ofrecer alguna información sobre cuál usar? ¿Cuáles tienen puntos de referencia para el rendimiento en términos de mensajes pasados ​​por segundo?

+3

no vemos cómo se trata de un duplicado de http://stackoverflow.com/questions/436050/events-in-java, salvo que una de las respuestas fue "actores". Y el primero estaba algo muerto (sin mencionar a Kilim, Akka o Jetlang). También –

+0

búsqueda para "[java] actores" – oluies

+2

Tengo un nuevo y genial uno: https://github.com/RuedigerMoeller/kontraktor –

Respuesta

60

This es una buena serie de artículos. También vea la presentación this. Carl Hewitt explica la esencia del Actor Model of computation here.

Killim y Akka (scala) tiene el mejor rendimiento. Sugeriría usar Akka. Starting with Scala 2.11.0, la biblioteca Scala Actors está en desuso. Ya en Scala 2.10.0, la biblioteca predeterminada del actor es Akka. Usa akka como frontend y llama a tu código java si no quieres hacer toda la codificación en Scala. Scala y Akka tienen una muy buena sintaxis y API. Akka tiene una API de Java llamada "Objetos activos". Tenga en cuenta que hay muchas cosas que están sucediendo en Akka en este momento, por lo que la base de códigos se está moviendo rápidamente. Ver el Java getting started doc

Killim está basado en Java pero sí compila el tiempo.

Jetlang y FunctionalJava son opciones que no hace tiempo de compilación tejer (?? seguro), pero no es tan rápido como Akka y Killim (no hay datos actuales sobre esto, pero hay algunos números viejos en Jonas Boners and Viktor Klangs talk at Scala Days 2010).

Otra opción es utilizar JMS normal (o algún otro MQ/PubSub). También podría hacer your own simple canales/trabajadores de publicación intra JVM. O simplemente utilizar java util concurrent ExecutorService o com.google.common.util.concurrent

otros marcos/librerías basadas Scala con implementaciones de actores son Stambecco, Lift y Scalaz.

Otros modelos similares son Hazlecast Distributed Executor Service, Oracle Coherence con InvocableService, GigaSpaces Executors o IBM eXtreme Scale. Pero a estos les falta hasta cierto punto la parte de "Actores son sistemas".

+4

También vale la pena mencionar es que Akka tiene una API de Java (Activo) –

+1

añadir reactor y RxJava –

+2

también la nota Vert.x –

1

The Scala Actors es mi mejor sugerencia.

Ver http://www.scala-lang.org/node/242 para un breve tutorial.

+0

pueden los actores Scala usarse en Java? (Aún aprecio respuestas que utilizan la JVM.) –

+2

Scala es un lenguaje compatible con JVM 100%, por lo que, Sí se puede usar en Java. –

+1

Creo que deberías decir "úsala con java". Por ejemplo, es fácil llamar a Java desde Scala y llamar a Scala desde Java. Pero es un poco más que otro archivo jar: http://blog.lostlake.org/index.php?/archives/73-For-all-you-know,-its-just-another-Java-library. html – oluies

9

Realizamos un estudio relacionado titulado "Actor frameworks for the JVM platform: A Comparative Analysis", que se publicó el año pasado y compara la sintaxis, la semántica y el rendimiento de algunos de los frameworks Actor basados ​​en JVM. Está disponible en https://www.researchgate.net/profile/Gul_Agha/publication/221302944_Actor_frameworks_for_the_JVM_platform/links/55aeb2df08aed614b09a775c.pdf?origin=publication_detail. Espero que le sea útil.

+1

¿Le gustaría hacer comentarios sobre lo que ha sucedido desde entonces? –

1

Bueno, estaba buscando una buena implementación de actores en Scala, y miré tanto a nativos Scala como a Akka. Encontré ambos excesivamente complejos. Luego encontré Lift Actors, que encontré simple, elegante y bien diseñada. Todo lo anterior se puede usar desde Java (a través de métodos nombrados compatibles con Java).

Discusión en: http://erikengbrecht.blogspot.com/2009/06/pondering-actor-design-trades.html

descarga en: http://liftweb.net/

Sólo se necesita levantar actor _ ?. tarro y de elevación común _ ?. tarro de las descargas de elevación (más Scala std lib). Echa un vistazo a la fuente Lift actors Scala: muy ordenada.

11

Jumi Actors es una biblioteca actor por Java. Fue diseñado para ser natural en el código de Java: no es necesario crear una clase para cada mensaje, pero los mensajes se representan como métodos en una interfaz. Además, sus actores son recolectores de basura, por lo que no necesitan ser detenidos explícitamente. Código usando Actores JUMI es testable, tanto unidad comprobable sin el recipiente de actores y la integración comprobable usando una implementación determinista de subproceso único recipiente.

En comparación con Akka Actors es mucho más pequeño en tamaño binario (33 KB vs 10+ MB) y mucho más rápido. En cuanto a the Pi example in Akka Tutorial y the same example using Jumi Actors, con Akka el cálculo tarda unos 480-520 ms, pero con actores JUMI solamente 350-390 ms. (La diferencia sin duda, sería aún mayor si los actores no harían el trabajo y que se mide sólo el paso de mensajes.) Al comparar el rendimiento de inicio, a partir del contenedor Akka tiene 620 ms, pero a partir del recipiente de Actores Jumi tarda sólo 25 ms.

3

Otra opción es GPars. Groovy basado, pero se puede llamar desde Java como Akka.

Cuestiones relacionadas