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 ?
Réponses
Trop de publicités?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.
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.
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.