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.
Scala 2.10
, la scala.actors
biblioteca se volvió obsoleta a favor de los actores de Akka.
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.
Scala 2.10
, la scala.actors
biblioteca se volvió obsoleta a favor de los actores de Akka.
Respuestas:
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.
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.
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.