Actor Model - llpuchaicela/Threads_VS_Actor_Model GitHub Wiki

El actor model proporciona un mayor nivel de abstraccion para escribir sistemas concurrentes y distribuidos. Evita que el desarrollador tenga lidiar con el bloqueo explícito y la gestion de subprocesos, lo que facilita la escritura de sistemas paralelos y concurrentes correctos.

Actor Model en Java

Los actores en Java se crean ampliando la clase "UntypedActor" e implementando el método "onReceive". Este método toma el mensaje como parámetro.

Creando Actores

Para la creación de actores se realiza con la integración de un Framework con Akka.

AKKA

Es una biblioteca de código abierto que ayuda a desarrollar fácilmente aplicaciones concurrentes y distribuidas utilizando Java o Scala aprovechando el Modelo de Actores (Actor Model) la misma que fue creada por Carl Eddie Jewett en 1973, como un modelo teórico para manejar calculo concurrente. Donde comenzó a mostrar su aplicabilidad practica cuando la industria del software comenzó a darse cuenta de los peligros de implementar aplicaciones concurrentes y distribuidas. Para entender un Actor representa una unidad de calculo independiente.

Algunas características importantes son:

  • Encapsula su estado y parte de la lógica de la aplicación.
  • Los actores interactúan solo a través de mensajes asincrónicos y nunca a través de llamadas directas a métodos
  • Cada actor tiene una dirección única y un buzón en el que otros actores pueden enviar mensajes
  • El actor procesara todos los mensajes en el buzón en orden secuencial (la implementación predeterminada del buzón es una cola FIFO)
  • El sistema de actores esta organizado en jerarquía similar a un árbol
  • Puede crear otros actores, puede enviar mensajes a cualquier otro actor y detenerse a si mismo

Ventajas

El desarrollo de aplicaciones concurrentes es dificil porque se necesita lidiar con la sincronizacion, los bloqueos y la memoria compartida. Sin embargo mediante el uso de actores de Akka, podemos escribir facilmente codigo asincorno sin necesidad de bloqueos ni sincronizacion.

  • El subproceso del remitente no se bloqueara para esperar un valor de retorno cuando envie un mensaje a otro actor. El actor receptor respondera con el resultado enviando un mensaje de respuesta al remitente.
  • No se tiene que preocupar por la sincornizacion en un entorno de subprocesos multiples. Esto se debe al hecho de que todos los mensajes se procesan secuencialmente.
  • El manejo de errores al organizar a los actores en una jerarquis, cada actor puede notificar a su padre sobre la falla, para que pueda actuar en consecuencia.
  • El actor principal puede decidir detener o reiniciar los actores secundarios