2012-02-20 7 views
70

Encontré que también hay un modelo de actor Akka, así que me pregunto ¿cuál es la diferencia entre el Actor de Akka y el modelo Actor de Scala?¿Cuál es la diferencia del Actor de Akka con el Actor de Scala modelo

+1

Ver [¿Cuál es la diferencia entre la implementación de diferentes actores en Scala?] (Http://stackoverflow.com/q/5997018/53013) –

+1

Los actores de Scala ahora están en desuso en favor de los actores de Akka, entonces ¿para qué molestarse? :) http://goo.gl/VaPOu –

Respuesta

54

Bueno, no hay. Solo existe el modelo Actor, y los actores Akka y los actores Scala son dos implementaciones de ese modelo.

Todo el modelo de actor dice que sus primitivas de concurrencia son actores, lo que puede:

  • recibir un mensaje y decidir qué hacer a continuación en función del contenido del mensaje, incluyendo:

  • envío mensajes a los actores que saben sobre

  • crear nuevos actores

y proporciona ciertas garantías, por ejemplo:

  • cualquier actor sólo manejar un único mensaje a la vez

  • mensajes enviados por el actor X con el actor Y llegarán en el parecían orden fueron enviados

No hay diferencia entre los actores de Scala y Akka en este nivel.

Para las diferencias en lo que pueden hacer, vea Different Scala Actor Implementations Overview. El más grande, para mí, es que Akka apoya a los supervisores y ActorRegistry.

+5

Parece que el PDF de comparación vinculado por la respuesta aceptada ya no está disponible. Aquí hay una comparación de uno de los desarrolladores de Akka: http://akka.io/docs/misc/Comparison_between_4_actor_frameworks.pdf – Frank

+5

Su enlace es 404 también. Esto está funcionando actualmente: http://doc.akka.io/docs/misc/Comparison_between_4_actor_frameworks.pdf –

6

Esto depende un poco de lo que quiere decir con "modelo" - puede consultar el "modelo de ejecución" o el "modelo de programación" (y quizás también otros modelos).

Para los modelos de ejecución, hay básicamente dos: basado en hilo o basado en eventos. La biblioteca de actores estándar de Scala contiene ambos. El hilo basado en utiliza un hilo para cada actor, mientras que el basado en eventos utiliza un grupo de hilos. El primero es más intuitivo de entender, el último es más eficiente. Akka se basa en el modelo basado en eventos.

Para el modelo de programación, existe una gran diferencia entre la biblioteca estándar Scala y Akka. En la biblioteca estándar de scala, básicamente implementa el método "ejecutar", y si desea esperar un mensaje entrante, se pone en estado de espera (llamando a "recibir" o "reaccionar"). Entonces, el modelo de programación sigue la "metáfora de hilos". Sin embargo, en Akka, la metáfora de la programación es que se implementan algunos métodos de ciclo de vida, pero el método "ejecutar" se escribe dentro del marco. Realmente resulta que este modelo de programación funciona mucho mejor con el modelo de ejecución basado en eventos también.

Si está interesado en los diferentes modelos de ejecución y modelos de programación de los actores estándar scala, he escrito afewposts sobre el tema.

29

También hay una respuesta histórica. Los creadores de Scala pensaron que debería haber un marco de actor. Jonas Bonér lo probó, pero no estaba completamente satisfecho, así que comenzó a trabajar en uno nuevo, que se convirtió en Akka.Sin embargo, la gente de Scala pensó que era mejor que la suya, por lo que en Jfokus 2011 anunciaron que Akka se convertiría en el marco de actor estándar de Scala. Sin embargo, esa migración llevará algún tiempo.

+1

Sí, la biblioteca de Scala Actors ya está en desuso en 2.11 http://docs.scala-lang.org/overviews/core/actors -migration-guide.html – anshumans

Cuestiones relacionadas