开发者学堂课程【Scala 核心编程 - 进阶:Actor 模型工作机制和消息机制】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/610/detail/9114
Actor 模式工作机制和消息机制
内容介绍
一、Actor 模式工作机制说明
二、Actor 间传递消息机制(对照工作机制示意图理解)
三、案例演示
四、板书总结
一、Actor 模式工作机制说明
1、工作机制示意图
首先创建一个 Actorsystem,如 AActorREF 和 BActorREF 创建完成后,进行通讯
2、Actor 如果想给自己发消息,就通过A ActorREF
3、AActor 想给B Actor发消息就需要持有B ActorRef,通过B ActorRef发消息。
Dispathcher message 消息分发器,可作为线程池,所有的消息均有其进行调度和管理,如同打电话,张三给李四打电话,李四在广州的消息,首先在消息中转基站进行消息的转换,通过语音信号发送给张三,大致工作原理和Dispathcher message 消息分发器相似。
Mail box 知道消息由谁发送,消息一旦到达,便推送给B ActorRef
4、B Actor中
Receive 方法 {
//1.消息接收和处理
//2.通过sender()方法得到发送消息的Actor的ActorRef,通过这个 ActorRef,B ActorRef,并不会一直等待,也可以回复消息
1.Actorysystem 创建一个 Actor
2.ActorRef 可以看理解是Actor的代理或者引用。消息是通过 ActorRef 来发送,而不能通过 Actor 来发送消息,通过那个 ActorRef 来发送消息,就表示把该消息发给那个Actor
3.消息发送到Dispathcher message (消息分发器),他得到消息后,此时注意B ActorRef,并不会一直等待,Actor 可自动进行消息的传送,会将消息进行分发到对应的 mailbox(注:Dispathcher message 可以理解成一个线程池,mailbox 可理解为消息队列,可以缓冲多个消息,遵守 fifo
4.Actor 可以通过 receive 方法来获取信息,然后进行处理
二、Actor 间传递消息机制(对照工作机制示意图理解)
1.每一个消息就是一个 message 对象,message 继承了 runable,因为 message 就是线程类
2.从 Actor 模型工作机制看上去很麻烦,但是程序员编程时,只需要编写 Actor 即可,其它交给 Actor 模型完成即可,看上去麻烦,实操简单,相关程序会隐藏在后台,只需要进行 Actor 模型的创建
3.A Actor 要给B Actor发送消息,那么 A Actor 要先拿到(也称为持有)B Actor 的代理对象 ActorRef
才能发送消息
三、案例演示
1.Akka 介绍
(1)Akka 是 JAVA 虚拟机 jvm 平台上构建高并发、分布式、和容错应用的工具包和运行时
可以理解成 Akka 是编写并发程序的框架
(2)Akka 用 scala 语音写成,同时提供了 scala 和 JAVA 的开发接口
(3)AKKA 主要解决的问题是:可以轻松的写出搞笑稳定,并发程序,程序员不再过多的考虑线程、锁和资源竞争等细
2.Actor 模型用于解决什么问题?
(1)处理并发问题关键是要保证共享数据的一致性和正确性,因为程序是多线程的,多个线程对同一数据进行修改,若不加同步条件,势必会造成数据污染。
但是当我们对关键代码加入同步条件 sync hronized 后,实际上大并发就会堵塞在这段代码,对程序效率有很大影响
(2)若用单线程处理,不会有数据一致性问题但系统性能有不能保证
(3)Actor 模型的出现解决了这个问题,简化并发编程,提升程序性能。
可以这里理解:
actor 模型是一种处理并发问题的解决方案。
四、板书的总结
1、AKKA 的 Actor 模式
1.Akka 处理并发的方法基于 Actor 模型
2.在基于 Actor 的系统里,所有事物都是 Actor,就好像在面向对象设计里面所有的事物都是对象一样
3.Actor 模型是作为一个并发模型设计和架构的。
Actor 与 Actor 之间只能通过消息通信
Actorpth 作为 actor 远端通讯的概念,可进行 Actor 与 Actor 之间,不同机器的连接
(2)Akka 是 JAVA 虚拟机 jvm 平台上构建高并发、分布式、和容错应用的工具包和运行时
可以理解成 Akka 是编写并发程序的框架
(3)Akka 用 scala 语音写成,同时提供了 scala 和 JAVA 的开发接口
(4)AKKA 主要解决的问题是:可以轻松的写出搞笑稳定,并发程序,程序员不再过多的考虑线程、锁和资源竞争等细节
(5)Actor 与 Actor 之间只能用消息进行通信,当一个Actor 给另外一个Actor 发消息,消息是有顺序的(消息队列)只需要将消息投机的相应的邮箱即可
(6)怎麽处理消息是由接收信息的Actor 决定的,发送消息Actor 可以等待回复,也可以异步处理{ajax}
(7)Actor System 的职责是负责创建并管理其创建的Actor ,Actor System是单例的(可以 Actor System 是一个工厂,专门创建Actor ),一个jvm进程中有一个即可,而 Actor 是可以有多个的
(8)Actor 模型是对并发模型进行了更高的抽象
(9)Actor 模型是异步、非阻塞、高性能、的事件驱动编程模型。
最经典的案例就是ajax异步请求处理
2.Actor模型工作机制说明
说明了Actor模型工作机制(对应上图)
(1)Actor 如果想给自己发消息,就通过 A ActorREF
(2)A Actor 想给B Actor发消息就需要持有 B ActorRef,通过 B ActorRef 发消息
(3)消息发送到 Dispathcher message (消息分发器),他得到消息后,会将消息进行分发到对应的 mailbox(注:Dispathcher message 可以理解成一个线程池,mailbox 可理解为消息队列,可以缓冲多个消息,遵守 fifo
(4)Actor 可以通过 receive 方法来获取信息,然后进行处理
Actor 模型消息机制(对应上图)
(1)每一个消息就是一个 message 对象,message 继承了 runable
,因为 message 就是线程类
(2)从Actor 模型工作机制看上去很麻烦,但是程序员编程时,只需要编写 Actor即可,其它交给Actor模型完成即可
(3)A Actor 要给 B Actor发送消息,那么 A Actor 要先拿到(也称为持有)B Actor 的代理对象 ActorRef
才能发送消息