Akka/Erlang 的 actor 模型与 Go 语言的协程 Goroutine 与通道 Channel 代表的 CSP(Communicating Sequential Processes) 模型有什么区别呢?
首先这两者都是并发模型的解决方案,我们看看 Actor 和 Channel 这两个方案的不同:
Actor 模型
在 Actor 模型中,主角是 Actor,类似一种 worker,Actor 彼此之间直接发送消息,不需要经过什么中介,消息是异步发送和处理的:
Actor 模型描述了一组为了避免并发编程的常见问题的公理:
- 所有 Actor 状态是 Actor 本地的,外部无法访问。
- Actor 必须只有通过消息传递进行通信。
- 一个 Actor 可以响应消息: 推出新 Actor, 改变其内部状态, 或将消息发送到一个或多个其他参与者。
- Actor 可能会堵塞自己, 但 Actor 不应该堵塞它运行的线程。
更多可见 Actor 模型专题
. . .