并发编程模型: Actor模型

话说, 在并发编程中通常使用的两种方案是: 共享数据消息传递.
使用共享数据方式的并发编程面临的最大的一个问题就是数据条件竞争,处理各种锁的问题是让人十分头痛的一件事。
基于消息传递的并发模型有CSP模型(golang)和Actor模型, 这两种模型很像, 本文只讨论Actor模型.

Actor简介

Actor模型是一个通用的并发编程模型,而非某个语言或框架所有,几乎可以用在任何一门编程语言中,其中最典型的是erlang,在语言层面就提供了Actor模型的支持,杀手锏应用RabbitMQ 就是基于erlang开发的。

Actor模型很好的解决了数据共享的问题,因为Actor自身维护着自己的数据状态,不受其它actor干扰也不会去修改其它Actor,只通过接受收消息进行处理请求,但这通过多层actor之间的处理必然会带来通信损耗,不过对于分布式系统是肯定的,需要对业务与Actor模型之间的设计有良好的粒度划分,不宜过大与过小。

Actor特点

Actor 的核心思想是 独立维护隔离状态,并基于消息传递实现异步通信。围绕其进行实现,actor 通常包含以下特征:

  • 每个 actor 持有一个邮箱(mailbox),本质上是一个队列,用于存储消息。
  • 每个 actor 可以发送消息至任何 actor。
  • 每个 actor 可以通过处理消息来更新内部状态,对于外部而言,actor 的状态是隔离的状态(isolated state)。

任务调度方式(Dispatcher)

Actor 模型根据任务调度的方式可以分为两种,分别是:

  • 基于线程(thread-based)的 actor 模型[线程数量受到限制]
  • 事件驱动(event-driven)的 actor 模型[事件触发才分配线程处理][主流方式]

实现关键点

ActorId 定位到actor位置,用以发送消息

用以定义Actor的位置

  • 服务器ID
  • 进程ID
  • 类型
  • 唯一KEY

Actor 具体实现

ActorService 用于管理应用所有Actor

ActorSystem

顶级Actor,可以创建和停止Actors,甚至可关闭整个Actor环境,此外Actors是按层次划分的,ActorSystem就好比Java中的Object对象。

ActorSystem是Actor的管理系统,也是外部调用API的主要入口,提供本框架中的主要功能:创建Actor、发送消息、休眠Actor、网络通信等。

此处评论已关闭