Lorsque nous regardons le modèle d'acteur et les processus séquentiels communicants, nous voyons qu'ils essaient tous les deux de faire de la concurrence basée sur le passage de messages , mais ils sont distincts .
(Nous voyons des implémentations du modèle CSP dans les goroutines de go-lang (et core.async de Clojure ) et le modèle d'acteur dans la boîte à outils Akka de Scala )
J'essaie d'obtenir une liste simple des différences entre le modèle d'acteur et le CSP. Jusqu'à présent, j'ai:
- le passage du message des acteurs est asynchrone, le passage du message CSP est synchrone
- les acteurs sont composables , le CSP ne l'est pas (nécessairement)
- les acteurs ont toujours un non-déterminisme illimité , le CSP peut avoir un non-déterminisme borné ou illimité
- les acteurs ont une topologie variable alors que CSP a une topologie fixe
- les acteurs ont le principe de localité , le CSP n'a pas de localité
- les acteurs sont conçus autour de leur comportement, le CSP n'a pas forcément
Est-ce correct? Y a-t-il quelque chose qui me manque?
Hypothèses
- Quand je dis «modèle d'acteur» - je veux dire la base théorique derrière la mise en œuvre dans le cadre Akka de Scala
concurrency
message-passing
oeil de faucon
la source
la source
Réponses:
Voici comment je pense qu'Erlang fonctionne. Je pense que Akka est très similaire.
Chaque processus a une seule boîte aux lettres. Les messages sont placés dans la boîte aux lettres du destinataire par l'expéditeur et récupérés par le destinataire à l'aide de la correspondance de modèle. Ce processus de correspondance peut modifier l'ordre des messages dans le sens où le message le plus ancien d'une boîte aux lettres peut ne pas correspondre, mais un plus jeune le fait. Dans ce cas, le plus jeune est consommé en premier. En dehors de cela, l'ordre des messages est préservé.
la source