Actor模型

589 阅读2分钟

Actor模型是一种编程范式。在Actor模型中,最基本的执行单元是Actor。

Actor模型很适合编写大型、分布式、消息延迟不可知的异步系统。

背景

Actor模型于1973年被提出。这个模型定义了一组规则,指导系统组件在并发计算环境中该如何交互。最著名的Actor模型实现应该是Akka和Erlang。

Actor

Actor模型中的最基本的计算单元。可执行如下操作:

  1. 创建新的Actor
  2. 发送消息
  3. 描述如何处理下一个消息

Actor比线程要轻量,占用的资源更少。因此,可以很容易的创建数百万个Actor实例。

每个Actor都有自己的私有状态及消息队列。消息来自Actor外部的系统或其他Actor实例。消息以FIFO的方式被处理。Actor的私有状态只能通过处理来变更。Actor对消息的处理是异步的,也就是Actor不会等待其他Actor的消息回复。

Actor只能与它知道地址的Actor交互(发送/接收消息),这就包括2种Actor:

  1. 当前Actor创建的子Actor
  2. 从消息中抽取出地址的Actor

通过使用Actor模型,我们可以创建自愈系统或容错系统。第一个Actor可以称为master Actor,由master Actor创建的Actor可以称supervisor。当一个Actor出错后,它的supervisor actor可以采取如下操作进行自愈或容错:

  1. 重启Actor
  2. 将消息转发给其他正常运行的Actor

Actor本质上是互相隔离,且不共享内存的。

Actor模型优点

  1. 容易扩展
  2. 容错
  3. 没有共享状态

Actor模型缺点

  1. 消息队列溢出
  2. 订阅死锁

Reference

Down and dirty: understanding Actor Model

Actor Model In Nutshell