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

J'ai trouvé qu'il y a aussi un modèle d'acteur Akka, donc je me demande Quelle est la différence entre L'acteur D'Akka et le modèle D'acteur de Scala?

71
demandé sur Tomasz Nurkiewicz 2012-02-20 13:00:10

3 réponses

Eh bien, il n'y en a pas. il y a juste un modèle D'acteur, et les acteurs Akka et Scala sont deux implémentations de ce modèle.

Tout modèle D'acteur indique que vos primitives de concurrence sont des acteurs, ce qui peut:

  • Recevoir un message et de 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 certains garanties, par exemple:

  • Tout acteur se gérer qu'un seul message à la fois

  • Les Messages envoyés par l'acteur X pour l'acteur Y arriveront dans l'ordre qu'ils ont été envoyés

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

Pour connaître les différences dans ce qu'ils peuvent faire, consultez aperçu des différentes implémentations D'acteurs Scala . Le plus important, pour moi, est que Akka soutient les superviseurs et ActorRegistry.

56
répondu Alexey Romanov 2017-05-23 12:33:29

Il y a aussi une réponse historique. Les créateurs de Scala pensaient qu'il devrait y avoir un cadre d'acteur. 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 pensaient que c'était mieux que le leur - alors à Jfokus 2011 ils ont annoncé Qu'Akka allait devenir le cadre d'acteur standard de Scala. Cependant, cette migration prendra un certain temps.

30
répondu Dan Bergh Johnsson 2012-09-07 06:19:24

Cela dépend un peu de ce que vous voulez dire avec "model" - Vous pouvez soit vous référer au "modèle d'exécution" ou 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 des threads ou basés sur des événements. La bibliothèque Scala standard actor contient les deux. Le fil utilise un thread pour chaque acteur, alors que l'événement utilise un fil de la piscine. 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 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 "receive" ou "react"). Ainsi, le modèle de programmation suit la "métaphore du fil". Cependant, dans Akka, la métaphore de programmation est que vous implémentez quelques méthodes de cycle de vie-mais la méthode " run " est écrit à l'intérieur du cadre. 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 des acteurs Standard scala, j'ai écrit a peu Messages sur la question.

6
répondu Dan Bergh Johnsson 2012-09-07 06:14:35