admin管理员组

文章数量:829191

Actor模型介绍

简介

Actor这个模型由Carl Hewitt在1973年提出,Gul Agha在1986年发表技术报告“Actors: A Model of Concurrent Computation in Distributed Systems”,Actor模型是并发编程中比较常见的模型,很多开发语言均提供了原生的支持,如erlang,scala等。

Actor特点


- Actor是指一个基本的计算单元,万物皆Actor。Actor与Actor之间并不共享内存,不存在相互调用,只有消息通知,Actor的数据状态完全由自己维护;
- Actor可简单理解为数据、行为及消息的整体,数据是指内部状态与上下文,行为是指逻辑的处理方法,消息是指可接受处理的类型消息;
- 具有容错性,Erlang 引入了「随它崩溃」的哲学理念,这部分关键代码被监控着,监控者的唯一职责是知道代码崩溃后干什么(如将这个单元代码重置为正常状态),Actor也一样为自己可制定监督策略,例如出现异常后重启Actor,使其达到自愈;
- 具有分布式特点,一个Actor给另一个Actor发送消息,它并不在意是在本地还是远程,只要消息能够到达就行,这允许我们在多台机器上构建集群系统;
- 与线程之间的关系, Actor模型的思想比线程更新抽象,其底层实现是由线程池进行实现,但在编程过程中看不到Thread的影子。

Actor行为

  • 可以创建其它Actor,整体Actor system呈现为一个树形结构,有着顶层的根节点,它自身也由上级Actor创建并受其监督;
  • 向其它Actor发送消息;
  • 指定消息到来时的行为。

任务调度

Actor模型的任务调度方式分为基于线程调度与基于事件调度,一般的实现都会基于事件的调度。
基于线程的调度是指为每个Actor分配一个线程,其实现较为简单,但缺点比较明显,因为将Actor与线程绑定起来,操作系统的线程数量是有限制的,且线程的开销是较大的。
基于事件的调度是指将Actor与线程池绑定起来,这样资源利用将会更加合理,但整个调度过程将会更加复杂。

为什么出现Actor模型

Actor模型的出现是为了应对分布式系统并发业务场景而出现的。并发与并行是两个相似而又不同的概念,并发是指一段时间内多个业务处理由开始到结束的过程,并行是指多个业务处理过程同时进行,可以明显看得出来并发与并行最大的不同在于是否为同时。
一般系统为了应对并发业务场景会采用多线程处理的方案,提高接收请求的吞吐量,后端充分利用机器的计算资源。此种方法可以分为FIFO队列推送方式与消息驱动方式两种,不论哪种方式都存在线程之间共享数据的情况,如共用缓存信息或队列消息,存在全局共享数据,就需要使用同步,同步就会带来性能的损耗与悲观锁的问题出现。
Actor模型很好的解决了数据共享的问题,因为Actor自身维护着自己的数据状态,不受其它actor干扰也不会去修改其它Actor,只通过接受收消息进行处理请求,但这通过多层actor之间的处理必然会带来通信损耗,不过对于分布式系统是肯定的,需要对业务与Actor模型之间的设计有良好的粒度划分,不宜过大与过小。

本文标签: Actor模型介绍