When we look at the Actor Model and Communicating Sequential Processes we see that they are both trying to do concurrency based on message passing, yet they are distinct.
(We see implementations of the CSP Model in go-lang's goroutines (and Clojure's core.async) and the Actor Model in Scala's Akka toolkit)
I'm trying to get a simple list of the differences between the Actor Model and CSP. So far I have:
- actors message passing is asynchronous, CSP message passing is synchronous
- actors are composable, CSP is not (necessarily)
- actors always have unbounded non-determinism, CSP may have bounded or unbounded non-determinism
- actors have variable topology whereas CSP has fixed topology
- actors have the principle of locality, CSP does not have locality
- actors are designed around their behaviour, CSP doesn't not necessarily have this
Is this correct? Is there anything I'm missing?
Assumptions
- When I say 'actor model' - I mean the theoretical basis behind the implementation in Scala's Akka framework