web-dev-qa-db-fra.com

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

J'ai trouvé qu'il y avait aussi un modèle d'acteur Akka, alors je me demande quelle est la différence entre le modèle d'Acteur d'Akka et le modèle d'acteur de Scala?

73
Evans Y.

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

Le modèle All Actor indique 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, notamment:

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

  • créer de nouveaux acteurs

et offre certaines garanties, par exemple:

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

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

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

Pour les différences dans ce qu'ils peuvent faire, voir Différent Scala Présentation des implémentations d'acteurs . Le plus important, pour moi, est que Akka prend en charge les superviseurs et ActorRegistry.

58
Alexey Romanov

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

30
Dan Bergh Johnsson

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 aussi à d'autres modèles).

Pour les modèles d'exécution, il y en a essentiellement deux: basés sur les threads ou basés sur les événements. La bibliothèque d'acteurs standard Scala contient les deux. La base basée sur les threads utilise un thread pour chaque acteur, tandis que la base basée sur les événements utilise un pool de threads. La première est plus intuitive à comprendre, la seconde est Akka est construit sur le modèle basé sur les événements.

Pour le modèle de programmation, il existe une grande différence entre la bibliothèque standard scala et Akka. Dans la bibliothèque standard scala, vous implémentez essentiellement la méthode "run" - et si vous voulez attendre un message entrant, vous vous mettez dans un état d'attente (en appelant "recevoir" ou "réagir"). Ainsi, le modèle de programmation suit la "métaphore du fil". Cependant, dans Akka, la programmation la métaphore est que vous implémentez quelques méthodes de 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.

Si vous êtes intéressé par les différents modèles d'exécution et modèles de programmation de scala acteurs standard que j'ai écrits apearticles sur la question.

6
Dan Bergh Johnsson