什么是 Actor
Actor 类似于一个“黑盒”对象,封装了自己的状态和行为,使得其他 Actor 无法直接观察到它的状态,调用它的行为。
多个 Actor 之间通过消息进行通信,这种消息类似于电子邮箱中的邮件。
Actor 接收到消息之后,才会根据消息去执行计算操作。那么,Actor 模型又是什么呢?Actor 模型,代表一种分布式并行计算模型。这种模型有自己的一套规则,规定了 Actor 的内部计算逻辑,以及多个 Actor 之间的通信规则。在 Actor 模型里,每个 Actor 相当于系统中的一个组件,都是基本的计算单元
对于 Actor 模式,对象 A、B 和 C 对应着 Actor A、Actor B 和 Actor C,当 Actor A 和 Actor B 需要执行 Actor C 中的 Function 逻辑时,Actor A 和 Actor B 会将消息发送给 Actor C, Actor C 的消息队列存储着 Actor A 和 Actor B 的消息,然后根据消息的先后顺序,执行 Function 即可。也就是说,Actor 模式采用了异步模式,并且每个 Actor 封装了自己的数据、方法等,解决了 OOP 存在的死锁、竞争等问题
Actor 模型的三要素
是状态、行为和消息,有一个很流行的等式:Actor 模型 =(状态 + 行为)+ 消息。
状态(State)。Actor 的状态指的是,Actor 组件本身的信息,相当于 OOP 对象中的属性。Actor 的状态会受 Actor 自身行为的影响,且只能被自己修改。
行为(Behavior)。Actor 的行为指的是,Actor 的计算处理操作,相当于 OOP 对象中的成员函数。Actor 之间不能直接调用其他 Actor 的计算逻辑。Actor 只有收到消息才会触发自身的计算行为。
消息(Mail)。Actor 的消息以邮件形式在多个 Actor 之间通信传递,每个 Actor 会有一个自己的邮箱(MailBox),用于接收来自其他 Actor 的消息,因此 Actor 模型中的消息也称为邮件。一般情况下,对于邮箱里面的消息,Actor 是按照消息达到的先后顺序(FIFO)进行读取和处理的
Actor 工作原理


Actor 关键特征
1.实现了更高级的抽象。Actor 与 OOP 对象类似,封装了状态和行为。但是,Actor 之间是异步通信的,多个 Actor 可以独立运行且不会被干扰,解决了 OOP 存在的竞争问题。
2.非阻塞性。在 Actor 模型中,Actor 之间是异步通信的,所以当一个 Actor 发送信息给另外一个 Actor 之后,无需等待响应,发送完信息之后可以在本地继续运行其他任务。也就是说,Actor 模型通过引入消息传递机制,从而避免了阻塞。
3.无需使用锁。Actor 从 MailBox 中一次只能读取一个消息,也就是说,Actor 内部只能同时处理一个消息,是一个天然的互斥锁,所以无需额外对代码加锁。
4.并发度高。每个 Actor 只需处理本地 MailBox 的消息,因此多个 Actor 可以并行地工作,从而提高整个分布式系统的并行处理能力。
5.易扩展。每个 Actor 都可以创建多个 Actor,从而减轻单个 Actor 的工作负载。当本地 Actor 处理不过来的时候,可以在远程节点上启动 Actor 然后转发消息过去 
文档信息
- 本文作者:Jessica
- 本文链接:https://jessica0530.github.io/2020/08/22/Actor/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)