一、什么是Actor模型?#
Actor模型是并发计算的概念模型,起源于1973年。在Actor模型中,Actor是基本的计算单元,认为一切皆为Actor。
Actor的基本操作:
- 创建另一个Actor
- 发送消息
- 指定如何处理下一条消息
Actor可以维护自己的状态,根据当前状态来决定如何处理下一条消息。
举例:一个Actor维护账户总余额,收到新的交易消息,则会更新Actor中状态的余额。对于下一条消息,Actor的状态将改变。
- Actor非常轻量,可以轻松创建成千上万个Actor,因为它需要的资源比线程少。
- Actor之间彼此隔离,不共享内存。它们都有自己的状态,但改变状态的唯一方法是接收消息。
- 每个Actor都有自己的邮箱,类似于消息队列,消息存储在邮箱中,Actor按照FIFO(先进先出)的顺序处理消息。
- Actor之间只能通过消息进行通信,消息是简单的不可变数据结构,可以轻松进行网络传输。
- 一个Actor一次只能处理一条消息。Actor之间是解耦的,它们异步工作,不需要等待其他Actor的响应。
- Actor拥有很多地址,它只能和拥有地址的Actor发送消息。它拥有自己的地址、子Actor的地址、接收到消息发送方Actor的地址、其他相同Actor实例的地址。
一个Actor可以有多个地址(实例)。地址不等同于Actor唯一标识identity。
- Actor可以运行在本地或者远程(在别的机器上),因为Actor模型通过地址通信,所以本地或者远程调用对系统来说是完全透明的。
二、容错机制#
在Actor模型中,Actor可以监管它的子Actor,包括存活检测、重启及消息失败后的重定向,实现自修复功能。

三、优缺点总结#
优点#
- 易于扩展
- 强大的容错能力
- 支持分布式部署
- 有效避免传统并发问题
缺点#
- 存在死锁的风险
- 消息队列可能溢出
Actor模型作为一种概念模型,其具体性能和特性取决于具体的实现框架。目前较为知名的实现框架包括Akka和Elixir。
