原文转自:http://www.tanjp.com (即时修正和更新)
概念
Actor模式是一种并发模型,其目标是充分利用计算机多核的优势,把一个大问题分拆成多个小问题并发处理,或者把多个平行的问题并发处理。一个Actor指的是一个最基本的计算单元。它能接收一个消息并且基于其执行计算。Actor一大重要特征在于Actor之间相互隔离,它们并不互相共享内存。也就是说,一个Actor能维持一个私有的状态,并且这个状态不可能被另一个Actor所改变,改变私有状态只能由Actor自身的行为(函数)来操作。光有一个Actor是不够的,多个Actors才能组成系统。在Actor模型里每个Actor都有所有其他Actor地址,它们能够相互发送消息,并组成系统。
Actor模式中的Actor是并行运算的最小单元,也就是说同一个Actor的行为不可能被并行处理。
Actor对象由三个元素构成:数据(data),行为(behavior),信箱(mailbox)。而信件(mail)是Actor与Actor之间沟通的唯一途径。
一组系统由一个或多个舞台(stage)组成,每个舞台上面有多个Actor。Actor的数据流,从投递信件(mail)到信箱(mailbox)开始,Actor对象严格按先后次序读取信箱的信件,触发并执行相应的行为(behavior),这些行为会改变数据(data),也会投递新信件(post mail)到其他Actor或者自己(行为所属的Actor)。
多个Actor的触发的行为会被调度器(scheduler)分配到各个线程去执行。
(原文有画图说明)
关键点梳理
1、同一个Actor的行为不可能被并行处理,同一时刻一个Actor只会有一个行为被执行。
2、Actor与Actor之间的数据状态相互隔离,不可直接改变。
3、Actor的数据只会被该Actor的行为来改变,消息不会改变数据。
4、Actor与Actor唯一的沟通方式就是投递消息。
5、Actor的信件严格按先后次序被触发。
6、一个Actor是没有意义的,多个Actor才能组成高并发的系统。
C++接口
调度器(Scheduler)
采用了行为(O