Contenidos
Conceptos fundamentales del modelo de actor
- Actor:
- Un actor es una entidad independiente que puede ejecutar tareas, almacenar su propio estado y comunicarse con otros actores.
- Los actores no comparten memoria directamente; en lugar de eso, interactúan enviando mensajes entre sí.
- Cada actor tiene su propio estado interno y es el único que puede modificarlo, lo que elimina la necesidad de mecanismos de sincronización complicados (como los bloqueos o mutex).
- Comunicación mediante mensajes:
- Los actores se comunican enviándose mensajes asincrónicos. Cada mensaje se coloca en una cola de mensajes de destino (actor receptor).
- El actor procesa los mensajes uno por uno en el orden en que llegan. Este procesamiento secuencial elimina la posibilidad de condiciones de carrera en el acceso a su estado interno.
- Los mensajes pueden contener datos y también instrucciones o peticiones de acción.
- Comportamiento del actor:
- Un actor responde a los mensajes que recibe ejecutando un comportamiento predefinido (por ejemplo, realizar un cálculo o actualizar su estado).
- Después de procesar un mensaje, el actor puede cambiar su estado y definir cómo debe comportarse cuando reciba mensajes futuros.
- Cada actor puede decidir cómo manejar mensajes específicos, lo que lo convierte en una entidad flexible y adaptable.
- Creación de actores:
- Un actor puede crear otros actores como parte de su ejecución. Estos actores hijos operan de manera independiente y tienen su propio estado y cola de mensajes.
- Este proceso permite crear jerarquías de actores, donde un actor padre puede supervisar a sus actores hijos.
- Escalabilidad y paralelismo:
- Debido a que los actores no comparten memoria y solo interactúan a través de mensajes, este modelo es altamente escalable y apto para sistemas distribuidos y paralelos.
- Los actores pueden ejecutarse en hilos separados, procesos independientes o incluso en máquinas diferentes en una red, siempre que se respete el paso de mensajes.
Beneficios del modelo de actor
- Tolerancia a fallos: Dado que los actores son entidades aisladas, los fallos en un actor pueden ser manejados sin afectar a otros. Además, los actores supervisores pueden reiniciar actores fallidos de manera controlada.
- Concurrencia segura: Como los actores no comparten memoria y la interacción se realiza mediante mensajes, no es necesario preocuparse por problemas comunes de la programación concurrente, como las condiciones de carrera o los bloqueos.
- Escalabilidad: El modelo de actor es adecuado para sistemas distribuidos y escalables porque se adapta bien a diferentes arquitecturas. Los actores pueden distribuirse fácilmente en múltiples máquinas o núcleos de CPU.
- Simplicidad en la sincronización: No es necesario usar primitivas de sincronización como semáforos o cerrojos. El paso de mensajes secuencial asegura que el actor procese un mensaje a la vez, simplificando la gestión del estado.
Ejemplo de uso de actores en Python
1 2 3 4 5 6 7 8 9 10 |
!pip install pykka # install the missing module from pykka import ThreadingActor class MyActor(ThreadingActor): def on_receive(self, message): print(f"Received message: {message}") actor = MyActor.start() actor.tell("Hello, Actor!") actor.stop() |