Actor 模型工作机制和消息机制 | 学习笔记

简介: 快速学习 Actor 模型工作机制和消息机制

开发者学堂课程【Scala 核心编程 - 进阶Actor 模型工作机制和消息机制学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/610/detail/9114


Actor 模式工作机制和消息机制


内容介绍

一、Actor 模式工作机制说明

二、Actor 间传递消息机制(对照工作机制示意图理解)

三、案例演示

四、板书总结


一、Actor 模式工作机制说明

1、工作机制示意图

image.png

首先创建一个 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 模式

image.png

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

才能发送消息

相关文章
|
18天前
|
Java
Java线程通信的精髓:解析通知等待机制的工作原理
Java线程通信的精髓:解析通知等待机制的工作原理
26 3
Java线程通信的精髓:解析通知等待机制的工作原理
|
算法 Java Android开发
抽丝剥茧聊Kotlin协程之Job是如何建立结构化并发的双向传播机制关系的
抽丝剥茧聊Kotlin协程之Job是如何建立结构化并发的双向传播机制关系的
抽丝剥茧聊Kotlin协程之Job是如何建立结构化并发的双向传播机制关系的
|
存储 数据库 开发框架
Newbe.Claptrap - 一套以 “事件溯源” 和“Actor 模式”作为基本理论的服务端开发框架
Newbe.Claptrap - 一套以 “事件溯源” 和“Actor 模式”作为基本理论的服务端开发框架 本文是关于 Newbe.Claptrap 项目主体内容的介绍,读者可以通过这篇文章,大体了解项目内容。
8883 0
|
并行计算
《并行计算的编程模型》一2.3.6 活动消息进程
本节书摘来华章计算机《并行计算的编程模型》一书中的第2章 ,第2.3.6节, [(美)帕万·巴拉吉(Pavan Balaji)编著;张云泉等译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
804 0
|
设计模式 前端开发 Java
Akka并发编程——第七节:Actor模型(六)
主要内容: 1. Typed Actor定义 2. Typed Actor创建 3. 消息发送 1. Typed Actor定义 Akka中的Typed Actor是Active Objects设计模式的实现,Active Objects模式将方法的执行和方法的调用进行解耦合,从而为程序引入并发性。Typed Actor由公用的接口和对应实现两部分构成,其后面深层次
3185 0

热门文章

最新文章