Comment le modèle d'acteur est-il utilisé?

18

J'ai lu un peu sur le modèle d'acteur, mais je ne comprends pas vraiment comment utiliser les acteurs dans une situation réelle - comment modéliser un problème avec eux.

Quelqu'un peut-il expliquer? Un exemple simple ou des liens vers des exemples seraient très appréciés.

Pnutus
la source
Ou voulez-vous dire le modèle d'acteur ?
back2dos
Je suppose que vous parlez d'agents, pas d'acteurs. Si oui, consultez cette entrée wikipedia: en.wikipedia.org/wiki/Software_agent
DwB
1
Ils jouent dans Green Lantern et Planet of the Apes afin de divertir les geeks à /. À leur tour, les geeks à /. divertir le reste d'entre nous.
Job
Je veux dire le modèle d'acteur et j'ai mis à jour mon message pour clarifier.
Pnutus

Réponses:

21

Acteurs, dans le sens de modéliser des actions, avec des messages, etc. est un moyen de modéliser un logiciel qui fournit quelques éléments utiles ...

  1. Les acteurs peuvent vivre sur un seul thread, permettant aux opérations non thread-safe / non simultanées de se produire sans un tas de magie de verrouillage. Un acteur répondra aux messages dans sa boîte de réception. Lorsque vous souhaitez qu'il traite une commande, vous lui envoyez un message et il s'occupe d'eux dans l'ordre de leur réception. Tout comme une file d'attente normale. Thread safe est un tueur ici, et je l'utilise dans un certain nombre de projets open source sur lesquels je travaille.

  2. Dans certaines langues, Scala par exemple, il est facile de transformer le code basé sur les acteurs en un seul processus en un système distribué en séparant les acteurs et en transformant les canaux qu'ils communiquent en canaux distants. Cela change entre les implémentations sur la facilité, mais c'est une fonctionnalité géniale.

  3. Aide à se concentrer sur les événements basés sur les tâches plutôt que sur les événements CRUD. CRUD est simple mais c'est comme interagir avec un classeur. Si nous pouvons fournir plus de valeur que cela dans le logiciel que nous produisons, pourquoi le faisons-nous? Lier plusieurs actions à une seule commande "Mettre à jour" dans un système basé sur des tâches est plus utile que simplement enregistrer dans la base de données. Cela entre également dans des choses comme CQRS.

Travis
la source
Merci pour votre réponse et vos liens utiles. Quelle langue recommanderiez-vous de commencer à étudier pour mieux comprendre les acteurs?
Pnutus
1
Je pense que cela dépend des langues avec lesquelles vous êtes à l'aise. Scala pourrait avoir la meilleure documentation sur les acteurs, car il s'agit d'un concept de langage. Erlang est génial pour la messagerie en général, cependant, tout le langage est basé sur ce concept.
Travis
Je vais jeter un œil à Scala et Erlang. J'ai trouvé ce guide du débutant pour Erlang, je vais commencer par là. Merci!
Pnutus
+1: Très intéressant. Savez-vous s'il existe une bibliothèque C ++ qui implémente des acteurs distants? Je serais heureux d'utiliser Scala mais mon projet est en C ++.
Giorgio
1
Considérez cette implémentation du modèle d'acteur C ++: acteur-framework.org
Chen OT
4

La réponse de Travis est solide. Lorsque vous commencez à parler de simultanéité, vous essayez de résoudre des problèmes de ressources. La concurrence avec les threads et les verrous est assez facile à faire mal. Le modèle d'acteur vous oblige à programmer des parties simultanées de votre code en tant que nuggets autonomes qui peuvent être exécutés en parallèle et sans dépendre d'un autre morceau de code. Vous essayez d'éviter la méchanceté comme les conditions de course et les blocages.

Les acteurs sont comme vous et moi dans cette conversation. Vous ne pouvez tout simplement pas entrer dans mon cerveau et choisir ce que je tape. Vous m'avez passé un message disant "Pourquoi existons-nous?" Je me suis assis et j'ai croqué quelques chiffres et j'ai envoyé une réponse "Je pense, donc je le suis." Vous ne pouviez pas dire ce que je faisais sur ma propre tranche de la planète Terre, le seul contact que vous avez avec moi est à travers les messages que nous transmettons.

ÉDITER:

Vous n'avez pas dit dans quelles langues vous êtes à l'aise, mais voyez s'il y a une implémentation d'acteur dans votre langue. Le plus simple serait peut-être quelques-unes des bibliothèques d'acteurs en python. Mais Erlang serait probablement mieux pour apprendre. La langue est un peu rude mais une fois que vous avez surmonté les nuances, c'est une bonne langue.

M15K
la source
Je ne sais pas si le montage de gnat est dirigé vers moi, mais mon arme de choix a tendance à être Haskell. Erlang est définitivement une bonne langue. Haskell s'est traditionnellement appuyé sur les CSP pour la concurrence, mais il existe des implémentations d'acteurs.
M15K
-2

Les acteurs sont un élément des diagrammes de cas d'utilisation qui représentent toute entité externe (utilisateur, système externe, etc.) pouvant agir sur un système. Tout cas d'utilisation de base contiendra des acteurs - il suffit de google "cas d'utilisation" pour une multitude d'exemples.

afeygin
la source
6
N'est-ce pas ce qu'on appelle des bâtons ?
pillmuncher
1
Je n'étais pas clair et vous avez mal compris. Je parlais du modèle d'acteur.
Pnutus