Actor模型与Akka
一. Actor模型
Actor模型概念
- 一个概念模型,用于处理并发计算
- Actor模型内部的状态由自己的行为维护,外部线程不能直接调用对象的行为,必须通过消息才能激发行为,这样就保证Actor内部数据只有被自己修改
Actor模型组成
Actor模型详解
- 在Actor模型中,一切都可以抽象为Actor,一个Actor指的是一个最基本的计算单元,它能接收一个消息并且基于该消息执行计算
- Actor封装状态和行为的对象,他们的唯一通讯方式就是交换消息,类比Object: 一个对象接收一条消息(方法调用),然后根据接收的消息做事(调用了哪个方法)
- Actor重要特征在于Actors之间相互隔离,他们并不互相共享内存,这点儿又区别于上面的Object对象,也就是说一个Actor能维持一个私有的状态,并且这个状态不可能被另一个Actor改变
- Actor交换的消息放在接收方的邮箱(Inbox)里,也就是说Actor之间并不直接通信,而是通过了消息来相互沟通,每一个Actor都把它要做的事情都封装在了它的内部
- 每一个Actor是可以有状态也可以是无状态的
- 当一个Actor接收到消息后,能做如下三件事中的一件: 创建其它Actors,向其它Actors发送消息,指定下一条消息到来的行为:就是Actors如何修改状态
- 每一个Actor都拥有属于自己的轻量级线程,保护它们不会被系统中的其他部分影响,因此,我们在编写Actor时,就不用担心并发的问题
- 通过Actor能够简化锁以及线程管理:
- 提供一种高级的抽象,能够封装状态和操作,简化开发应用开发
- 提供了异步的非阻塞的/高性能的事件驱动模型
- 超级轻量级的线程事件处理能力
Actor系统
Actor的生命周期
- ActorRef
它是Actor的一个引用,作用是发送消息给它表示的Actor, 而Actor可以通过self()
或sender()
方法来获取 到自身或者消息发送者的Actor引用,在Actor系统中,Actor之间永远都不能直接的通信,必须通过他们的代理ActorRef建立通信
Actor路径
父子Actor
树形结构,分层管理,通过递归把复杂的事务原子化
Actor Path:Actor System中唯一标识
- 本地Actor
"akka://my-sys/user/service-a/worker1"
- 远程Actor
"akka.tcp://my-sys@host.example.com:2552/user/service-b"
- 集群Actor
"clust
- 本地Actor