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

才能发送消息

相关文章
|
8月前
|
人工智能 JavaScript Serverless
从零开始开发 MCP Server
文章介绍了如何利用Serverless Devs CLI工具从零开发并一键部署MCP Server至阿里云函数计算(FC)。涵盖MCP协议背景、Serverless Devs工具简介、本地初始化与开发MCP Server步骤、通过SSE协议部署及测试MCP Server方法,以及三种客户端接入方式。读者可快速上手构建支持LLM扩展交互能力的智能体服务,并使用内置LLM的Inspector进行调试。文末还提供了更多资源和交流渠道。
2179 63
从零开始开发 MCP Server
QT软件开发: QPlainTextEdit当做日志显示窗口
QT软件开发: QPlainTextEdit当做日志显示窗口
1035 0
QT软件开发: QPlainTextEdit当做日志显示窗口
|
4月前
|
存储 弹性计算 运维
阿里云服务器ECS是什么?你真的了解吗?云服务器解析
阿里云服务器ECS是阿里云提供的虚拟服务器服务,用户可按需租赁使用,无需自建机房。它具备高可用、高安全、弹性伸缩、节约成本等优势,适用于网站搭建、数据应用、运维测试等多种场景。本文详解ECS组成、架构、使用方法及与传统服务器的区别。
497 1
|
2月前
|
数据采集 存储 自然语言处理
113_数据收集:Common Crawl过滤与高质量LLM训练数据构建
在大型语言模型(LLM)的训练过程中,数据质量直接决定了模型的性能上限。即使拥有最先进的模型架构和训练算法,如果没有高质量的训练数据,也难以训练出优秀的语言模型。Common Crawl作为目前互联网上最大的公开网络爬虫数据集之一,为LLM训练提供了宝贵的资源。然而,从原始的Common Crawl数据中提取高质量的训练素材并非易事,需要经过严格的过滤和清洗。本文将全面探讨Common Crawl数据集的特性、过滤策略的设计原则、以及2025年最新的过滤技术,为构建高质量的LLM训练语料提供系统指导。
|
NoSQL MongoDB 关系型数据库
13个Mongodb GUI可视化管理工具,总有一款适合你
本文介绍了13个好用的MongoDB可视化工具。Robomongo,MongoDB Compass,phpMoAdmin等
114630 0
13个Mongodb GUI可视化管理工具,总有一款适合你
|
安全 物联网
物联网卡锁卡是一个常见的问题,处理这类问题时,可以根据锁卡的具体原因采取相应的解决措施。以下是一些常见的物联网卡锁卡原因及其处理方法
物联网卡在使用的话过程中出现锁卡问题原因以及处理办法: 如锁卡,由于更换设备、长期未使用或者风险地区使用等原因触发的停机或管控,应及时与购卡公司或运营商联系处理。
|
数据可视化 数据处理 数据库
【Python篇】PyQt5 超详细教程——由入门到精通(中篇一)
【Python篇】PyQt5 超详细教程——由入门到精通(中篇一)
1154 2
|
canal 存储 Kubernetes
Kubernetes 之7大CNI 网络插件用法和对比
的通信,支持多种网络后端,如 VXLAN、UDP 和 Host-GW。 Calico:Calico 是一种基于 BGP 的网络插件,它使用路由表来路由容器之间的流量,支持多种网络拓扑结构,并提供了安全性和网络策略功能。 Canal:Canal 是一个组合了 Flannel 和 Calico 的网络插件,它使用 Flannel 来提供容器之间的通信,同时使用 Calico 来提供网络策略和安全性功能。 Weave Net:Weave Net 是一种轻量级的网络插件,它使用虚拟网络技术来为容器提供 IP 地址,并支持多种网络后端,如 VXLAN、UDP 和 TCP/IP,同时还提供了网络策略
7988 0
|
关系型数据库 MySQL PHP
【thinkphp知识】thinkphp 使用union链式操作合并两个或多个 SELECT 语句的结果集,新增不存在的字段,并赋予默认值
【thinkphp知识】thinkphp 使用union链式操作合并两个或多个 SELECT 语句的结果集,新增不存在的字段,并赋予默认值
320 0
|
存储 安全 API
Unity 数据读取|(六)PlayerPrefs解析
Unity 数据读取|(六)PlayerPrefs解析