- Actor 和消息传递
在面向对象编程语言中,对象的特点之一就是能够被直接调用:一个对象可以访问或修改另一个对象的属性,也可以直接调用另一个对象的方法。
这在只有一个线程进行这些操作时是没有问题的,但是如果多个线程同时读取并修改同一个值,那么可能就需要进行同步并加锁。
Actor 和对象的不同之处在于其不能被直接读取、修改或是调用。反之, Actor 只能通过消息传递的方式与外界进行通信。
简单来说, 消息传递指的是一个 Actor 可以接收消息(消息可以是一个对象), 可以发送消息, 也可以对接收到的消息作出回复。
尽管我们可以将这种方式与向某个方法传递参数并接收返回值进行类比,但是消息传递与方法调用在本质上是不同的:
消息传递是异步的。无论是处理消息还是回复消息,Actor 对外界都没有依赖。
Actor 每次只同步处理一个消息。邮箱本质上是等待 Actor 处理的一个工作队列,如
处理一个消息时,为了能够做出响应,Actor 可以修改内部状态,创建更多 Actor 或是将消息发送给其他 Actor。
几个重要的概念
- Actor
一个表示工作节点的并发原语,同步处理接收到的消息。Actor 可以保存并修改内部状态。 - 消息
用于跨进程(比如多个 Actor 之间)通信的数据。 - 消息传递
一种软件开发范式, 通过传递消息来触发各种行为, 而不是直接触发行为。 - 邮箱地址
消息传递的目标地址,当 Actor 空闲时会从该地址获取消息进行处理。 - 邮箱
在 Actor 处理消息前具体存储消息的地方。可以将其看作是一个消息队列。
Actor 系统
多个 Actor 的集合以及这些 Actor 的邮箱地址、邮箱和配置等。