¿Cómo se usa el modelo de actor?

18

He leído un poco sobre el modelo de actor, pero realmente no entiendo cómo usar actores en una situación del mundo real, cómo modelar un problema con ellos.

¿Alguien puede explicar? Un ejemplo simple o enlaces a ejemplos sería muy apreciado.

Pnutus
fuente
¿O te refieres al actor modelo ?
back2dos
Sospecho que te refieres a agentes, no a actores. Si es así, consulte esta entrada de Wikipedia: en.wikipedia.org/wiki/Software_agent
DwB
1
Protagonizan Green Lantern y Planet of the Apes para entretener a los geeks en /. A su vez, los geeks en /. entretener al resto de nosotros.
Trabajo
Me refiero al modelo de actor, y he actualizado mi publicación para aclarar.
Pnutus

Respuestas:

21

Los actores, en el sentido de acciones de modelado, con mensajes, etc., son una forma de software de modelado que proporciona un par de elementos útiles ...

  1. Los actores pueden vivir en un solo hilo, lo que permite que se realicen operaciones no seguras / no concurrentes sin un montón de magia de bloqueo. Un actor responderá a los mensajes en su bandeja de entrada. Cuando desee que procese un comando, le enviará un mensaje y se encargará de ellos en el orden en que se reciben. Al igual que una cola normal. El uso seguro de subprocesos es mortal aquí, y lo uso en varios proyectos de código abierto en los que trabajo.

  2. En algunos idiomas, por ejemplo, Scala, es fácil convertir el código basado en actores en un solo proceso en un sistema distribuido separando a los actores y convirtiendo los canales que comunican en canales remotos. Esto cambia entre implementaciones sobre lo fácil que es, pero es una característica increíble.

  3. Ayuda a centrarse en eventos basados ​​en tareas en lugar de eventos CRUD. CRUD es simple pero es como interactuar con un archivador. Si podemos proporcionar más valor que eso en el software que producimos, ¿por qué lo hacemos? Atar múltiples acciones a un solo comando "Actualizar" en un sistema basado en tareas es más útil que simplemente guardar en la base de datos. Esto también entra en cosas como CQRS.

Travis
fuente
Gracias por su útil respuesta y enlaces. ¿Qué idioma recomendarías comenzar a buscar para tener una mejor idea de los actores?
Pnutus
1
Creo que depende de con qué idiomas te sientas cómodo. Sin embargo, Scala podría tener la mejor documentación sobre actores, ya que son un concepto de lenguaje. Sin embargo, Erlang es increíble para la mensajería en general, todo el lenguaje se basa en ese concepto.
Travis
Echaré un vistazo a Scala y Erlang. Encontré esta guía para principiantes para Erlang, comenzaré allí. ¡Gracias!
Pnutus
+1: muy interesante. ¿Sabes si hay alguna biblioteca de C ++ que implemente actores remotos? Estaría encantado de usar Scala pero mi proyecto está en C ++.
Giorgio
1
Considere esta implementación del modelo de actor C ++: actor-framework.org
Chen OT
4

La respuesta de Travis es sólida. Cuando comienzas a hablar de concurrencia, estás tratando de resolver problemas de recursos. La concurrencia con hilos y cerraduras es bastante fácil de hacer mal. El modelo de actor ayuda a forzarlo a programar porciones concurrentes de su código como pepitas autónomas que se pueden realizar en paralelo y sin depender de otra pieza de código. Estás tratando de evitar la maldad como las condiciones de carrera y los callejones sin salida.

Los actores son como tú y yo en esta conversación. Simplemente no puedes alcanzar mi cerebro y elegir lo que estoy escribiendo. Me pasaste un mensaje que decía "¿Por qué existimos?" Me senté, puse algunos números y envié una respuesta "Creo, luego existo". No podías decir lo que estaba haciendo en mi propia porción del planeta Tierra. El único contacto que tienes conmigo es a través de los mensajes que pasamos de un lado a otro.

EDITAR:

No dijo en qué idiomas se siente cómodo, pero vea si hay una implementación de actor en su idioma. Tal vez la más simple sería algunas de las bibliotecas de actores en Python. Pero probablemente mejor para aprender sería Erlang. El idioma es un poco áspero, pero una vez que superas los matices, es un buen idioma.

M15K
fuente
No estoy seguro de si la edición del mosquito está dirigida hacia mí, pero mi arma preferida suele ser Haskell. Erlang es definitivamente un buen idioma. Haskell ha confiado tradicionalmente en los CSP para la concurrencia, pero existen algunas implementaciones de actores.
M15K
-2

Los actores son un elemento de los diagramas de casos de uso que representan cualquier entidad externa (usuario, sistema externo, etc.) que puede actuar en un sistema. Cualquier caso de uso básico contendrá actores, solo google "caso de uso" para una gran cantidad de ejemplos.

afeygin
fuente
66
¿No son esas llamadas figuras de palo ?
Pillmuncher
1
No estaba claro y me entendiste mal. Estaba hablando del modelo de actor.
Pnutus