73 votes

Quelle est la différence de l'acteur Akka avec le modèle d'acteur Scala ?

J'ai trouvé qu'il existe également un modèle d'acteur Akka, je me demande donc quelle est la différence entre l'acteur Akka et le modèle d'acteur Scala ?

58voto

Alexey Romanov Points 39124

Eh bien, il n'y en a pas. Il n'y a que le modèle Acteur, et les acteurs Akka et les acteurs Scala sont deux implémentations de ce modèle.

Le modèle Acteur dit que vos primitives de concurrence sont des acteurs, qui peuvent :

  • recevoir un message et décider quoi faire ensuite en fonction du contenu du message, y compris :

  • envoyer des messages à tous les acteurs qu'ils connaissent

  • créer de nouveaux acteurs

et fournit certaines garanties, par exemple :

  • chaque acteur ne traitera qu'un seul message à la fois

  • les messages envoyés par l'acteur X à l'acteur Y arriveront dans l'ordre où ils ont été envoyés

Il n'y a pas de différence entre les acteurs Scala et Akka à ce niveau.

Pour les différences dans ce qu'ils peuvent faire, voir Different Scala Actor Implementations Overview. La plus grande, pour moi, est qu'Akka prend en charge les superviseurs et ActorRegistry.

30voto

Il y a aussi une réponse historique. Les créateurs de Scala ont pensé qu'il devrait y avoir un cadre d'acteurs. Jonas Bonér l'a essayé, mais n'était pas complètement satisfait, alors il a commencé à travailler sur un nouveau - qui a évolué en Akka. Cependant, les gens de Scala ont pensé que c'était mieux que leur propre solution - donc lors de Jfokus 2011, ils ont annoncé qu'Akka allait devenir le cadre d'acteurs standard de Scala. Cependant, cette migration prendra du temps.

6voto

Cela dépend un peu de ce que vous entendez par "modèle" - vous pouvez vous référer soit au "modèle d'exécution" soit au "modèle de programmation" (et peut-être à d'autres modèles aussi).

Pour les modèles d'exécution, il y en a essentiellement deux : basés sur des threads ou basés sur des événements. La bibliothèque standard des acteurs en Scala contient les deux. Le modèle basé sur les threads utilise un thread pour chaque acteur, tandis que le modèle basé sur les événements utilise un pool de threads. Le premier est plus intuitif à comprendre, le second est plus efficace. Akka est construit sur le modèle basé sur les événements.

Pour le modèle de programmation, il y a une grande différence entre la bibliothèque standard Scala et Akka. Dans la bibliothèque standard de Scala, vous implémentez essentiellement la méthode "run" - et si vous souhaitez attendre un message entrant, vous vous mettez dans un état d'attente (en appelant "receive" ou "react"). Ainsi, le modèle de programmation suit la "métaphore du thread". Cependant, dans Akka, la métaphore de programmation est que vous implémentez quelques méthodes du cycle de vie - mais la méthode "run" est écrite à l'intérieur du framework. Il s'avère en fait que ce modèle de programmation fonctionne beaucoup mieux avec le modèle d'exécution basé sur les événements également.

Si vous êtes intéressé par les différents modèles d'exécution et modèles de programmation des acteurs en Scala standard, j'ai écrit quelques articles sur le sujet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X