¿Cuál es la diferencia del modelo Akka's Actor con Scala's Actor?

76

Descubrí que también hay un modelo de actor de Akka, así que me pregunto cuál es la diferencia entre el modelo de actor de Akka y el de actor de Scala.

Evans Y.
fuente
1
Los actores de Scala ahora están en desuso en favor de los actores de Akka, así que ¿por qué molestarse? :) goo.gl/VaPOu
Gian Marco
Comenzando Scala 2.10, la scala.actorsbiblioteca se volvió obsoleta a favor de los actores de Akka.
Johnny

Respuestas:

59

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

Todo modelo de Actor dice que sus primitivas de concurrencia son actores, que pueden:

  • recibir un mensaje y decidir qué hacer a continuación según el contenido del mensaje, que incluye:

  • enviar mensajes a los actores que conocen

  • crear nuevos actores

y proporciona ciertas garantías, por ejemplo:

  • cualquier actor solo manejará un solo mensaje a la vez

  • los mensajes enviados por el actor X al actor Y llegarán en el orden en que fueron enviados

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

Para conocer las diferencias en lo que pueden hacer, consulte Descripción general de las diferentes implementaciones de Scala Actor . El más importante, para mí, es que Akka apoya a los supervisores y ActorRegistry.

Alexey Romanov
fuente
6
El PDF de comparación vinculado por la respuesta aceptada parece no estar disponible. Aquí hay una comparación de uno de los desarrolladores de Akka: akka.io/docs/misc/Comparison_between_4_actor_frameworks.pdf
Frank
7
Tu enlace también es 404. Esto está funcionando actualmente: doc.akka.io/docs/misc/Comparison_between_4_actor_frameworks.pdf
Gian Marco
32

También hay una respuesta histórica. Los creadores de Scala pensaron que debería haber un marco de actores. Jonas Bonér lo probó, pero no estaba completamente satisfecho, por lo 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 actores estándar de Scala. Sin embargo, esa migración llevará algún tiempo.

Dan Bergh Johnsson
fuente
2
Sí, la biblioteca Scala Actors ya está obsoleta en 2.11 docs.scala-lang.org/overviews/core/actors-migration-guide.html
anshumans
7

Esto depende un poco de lo que quiera decir con "modelo"; puede referirse al "modelo de ejecución" o al "modelo de programación" (y quizás también a otros modelos).

Para los modelos de ejecución, existen básicamente dos: basados ​​en subprocesos o basados ​​en eventos. La biblioteca de actores estándar de Scala contiene ambos. El basado en subprocesos usa un subproceso para cada actor, mientras que el basado en eventos usa un grupo de subprocesos. El primero es más intuitivo de entender, el segundo 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 de Scala y Akka. En la biblioteca estándar de Scala, básicamente implementas el método "ejecutar" - y si quieres esperar un mensaje entrante, te pones en un estado de espera (llamando a "recibir" o "reaccionar"). Entonces, el modelo de programación sigue la "metáfora del hilo". 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 de "ejecución" está escrito dentro del marco. De hecho, resulta que este modelo de programación también funciona mucho mejor con el modelo de ejecución basado en eventos.

Si usted está interesado en los diferentes modelos de ejecución y programación de modelos de scala actores estándar He escrito un par de mensajes sobre el tema.

Dan Bergh Johnsson
fuente