Wenn wir uns das Actor Model und Communicating Sequential Processes ansehen, stellen wir fest, dass beide versuchen, auf der Grundlage der Nachrichtenübergabe eine Parallelität herzustellen , aber sie unterscheiden sich .
(Wir sehen Implementierungen des CSP Modell in go-lang ‚s goroutines (und Clojure der core.async ) und der Schauspieler Modell in Scala Akka - Toolkit)
Ich versuche, eine einfache Liste der Unterschiede zwischen dem Actor Model und dem CSP zu erstellen. Bisher habe ich:
- Die Nachrichtenübermittlung der Akteure erfolgt asynchron, die CSP-Nachrichtenübermittlung erfolgt synchron
- Schauspieler sind komponierbar , CSP ist nicht (unbedingt)
- Akteure haben immer einen uneingeschränkten Nichtdeterminismus , CSP kann einen uneingeschränkten oder uneingeschränkten Nichtdeterminismus haben
- Akteure haben eine variable Topologie, während CSP eine feste Topologie hat
- Akteure haben das Prinzip der Lokalität , CSP hat keine Lokalität
- Schauspieler sind auf ihr Verhalten ausgelegt, CSP muss dies nicht unbedingt haben
Ist das richtig? Fehlt mir etwas?
Annahmen
- Wenn ich "Actor Model" sage, meine ich die theoretische Grundlage für die Implementierung in Scalas Akka-Framework
concurrency
message-passing
Falkenauge
quelle
quelle
Antworten:
Hier ist, wie ich denke, Erlang funktioniert. Ich glaube Akka ist sehr ähnlich.
Jeder Prozess verfügt über ein einzelnes Postfach. Nachrichten werden vom Absender in die Mailbox des Empfängers gestellt und vom Empfänger mithilfe von Pattern Matching abgerufen. Dieser Abgleichsprozess kann die Nachrichtenreihenfolge in dem Sinne ändern, dass die älteste Nachricht in einer Mailbox möglicherweise nicht übereinstimmt, eine jüngere jedoch. In diesem Fall wird der jüngere zuerst konsumiert. Ansonsten bleibt die Nachrichtenreihenfolge erhalten.
quelle