Actor模型是一种编程范式。在Actor模型中,最基本的执行单元是Actor。
Actor模型很适合编写大型、分布式、消息延迟不可知的异步系统。
背景
Actor模型于1973年被提出。这个模型定义了一组规则,指导系统组件在并发计算环境中该如何交互。最著名的Actor模型实现应该是Akka和Erlang。
Actor
Actor模型中的最基本的计算单元。可执行如下操作:
- 创建新的Actor
- 发送消息
- 描述如何处理下一个消息
Actor比线程要轻量,占用的资源更少。因此,可以很容易的创建数百万个Actor实例。
每个Actor都有自己的私有状态及消息队列。消息来自Actor外部的系统或其他Actor实例。消息以FIFO的方式被处理。Actor的私有状态只能通过处理来变更。Actor对消息的处理是异步的,也就是Actor不会等待其他Actor的消息回复。
Actor只能与它知道地址的Actor交互(发送/接收消息),这就包括2种Actor:
- 当前Actor创建的子Actor
- 从消息中抽取出地址的Actor
通过使用Actor模型,我们可以创建自愈系统或容错系统。第一个Actor可以称为master Actor,由master Actor创建的Actor可以称supervisor。当一个Actor出错后,它的supervisor actor可以采取如下操作进行自愈或容错:
- 重启Actor
- 将消息转发给其他正常运行的Actor
Actor本质上是互相隔离,且不共享内存的。
Actor模型优点
- 容易扩展
- 容错
- 没有共享状态
Actor模型缺点
- 消息队列溢出
- 订阅死锁