5.13.Post方法进行线程切换

news2025/7/26 20:02:53

在上节课中呢,我向你介绍接口调用过程中啊,曾经看到过post方法。当时我已经向你解释过pose方法呢,就是从一个线程切换到另外一个线程,那整个的过程呢,非常简单,就是从发送线程创建一个消息。塞到接收线程的队列之后呢?再由接收线程来进行处理,那其原理呢?就如这张图所展示的。
在这里插入图片描述

线程一。它输出一个消息。输出到线程二的消息队列中,那么线程二呢?不停的从这个消息队列中获取消息。每获取到一个消息之后呢,都由线程二进行操作,这就是线程切换的原理非常简单。好,那我们来看看外部rtc线程切换都有哪些方法?首先呢,最根本的一个方法就是post方法,那么除了post方法呢,还有很多的衍生方法。比如说post task方法。
在这里插入图片描述

那对于post以及post task,它都属于异步调用方法。那什么意思呢?就是说发送线程只需要将我要处理的消息告诉接收线程,或者说目标线程执行就OK了。那他自己呢,可以继续向下执行,所以他是异步的。而像send方法以及invoke方法等等,这些其他方法呢?它是同步方法,也就是说发送线程将消息告诉接收线程之后。那接收线程处理完消息之后呢,还要通知发送线程说我这件事已经做好了。那此时呢,

发送线程才可以继续执行,否则的话,它就一直等待。直到接收线程通知我为止,对这就是同步切换方法,那所以呢,我们现在应该知道。对于wab 2t4来说呢,它提供了两大类线程切换的方法,一大类呢,是以post开头的post某某某方法。这是异步线程切换,还有一种是send invoke为开头的,它是同步线程切换。那我们知道它们之间的区别就OK了。
在这里插入图片描述

好,那对于这节课来说呢,我们重点介绍post方法,那首先呢,我们来看看post方法定义,那对于post方法来说呢它?包括的输入参数啊,还蛮多的。那第一个参数呢,是location类型。post from.实际它就是一个宏,那通过这个参数呢,目标线程就知道这个任务是从什么地方来的。那它有一什么好处呢?

好处就是可以让目标线程知道这个任务是由谁发送的,这样当我们调试的时候,我们也好确认。这个任务是由谁发送的?在什么地方发送的?那当我们遇到问题的时候呢,我们就能很好的确定这个问题到底从哪儿出现的是吧?这是location,它的一个作用,那在后边呢?是message handler类型的对象对吧?这个对象里包含了一个啊message方法。每当我们将一个消息告诉给目标线程之后,目标线程在执行的时候就会调用message handler中的on message方法。进行这个消息的处理,

具体的逻辑是什么?那是由message handler来确定的。再下边呢,是一个ID,那ID呢,通常都设成零目前呢,我们不太用这个参数,再接下来的data就是message data。它的作用呢,就是message handler在处理消息的时候,要对不同的数据进行区别对待。那具体怎么区分这个数据呢?就通过这个message data,那这个呢?就是用户提供的数据类型。

那在message handled中呢,就要根据message date中的具体内容来做具体的处理。所以这是message data,它的作用,那再下一个呢,就是对时间是否敏感,对吧?有些消息是时间敏感的,有些呢,是不太敏感的。那对于不太敏感的,可以delay执行的,可以放在delay队列中比较急切的,我们可以放在立即处理队列中。那这样呢,

可以对消息呢,做一次分级是吧?这就是pose方法的一个定义。好,那接下来呢?我们来看看post方法的实现,那在post方法中当收到输入参数之后。它首先将输入参数打包到一个消息中,也就是message消息中之后呢,将这个消息插入到message队列中,最后通过wake up socket server。来将目标线程唤醒。所以通过这个方法,我们可以知道,在我们调用的时候,
在这里插入图片描述

一定是要调用某个线程的post。将输入参数传进去之后,那么在这个中呢?它会对输入参数重新构造,构造成一个message,然后插入到自己现成的这个message队列中。最后呢,这个线程如果它处于睡眠状态,就将它唤醒,如果没有处于睡眠状态,这个实际就不做任何的操作。这就是post方法的实践逻辑非常的简单。好,那接下来呢?我们看看目标线程,

它是怎么做的?那首先我们要知道目标线程,它启动是如何启动的?通过create three的创建一个线程创建之后呢,执行pre run在pre run中呢,又会调用run方法。最后,run方法中调用process message方法对吧?所以这个process message。这里边儿的逻辑啊,非常重要,那我们来看一下process message中它是怎么做的?那在这个函数中呢?处理逻辑也非常简单,它就是一个死循环。在这里插入图片描述

一直在运行,在干什么呢?就是get message从哪get呢?就是从这个线程的message队列中。获取消息。如果此时message队列已经是空的,那么在get中它会睡眠,等待队列有数据的通知。对吧,一旦队列中有数据,它就可以获取到里边儿的消息,最后呢,通过diss配置。对这个消息进行处理。那在前面的课程中,

我已经对get里边的实验逻辑向你做了详细介绍了,现在记不清的同学呢,可以再翻过去看一看。get它是如何实验的?那今天呢?我们重点介绍一下dispatch message,看看dispatch message中是怎么处理这个消息的?好,对于dispatch message来说,它处理消息啊,实际就是调用其message中的handler。也就是post函数中的第二个参数。这用它里边儿的on message方法来处理这个消息,那么具体on message中是怎么做的?每个实现逻辑都是不一样的。
在这里插入图片描述

所以要根据具体的逻辑去分析on message中它是怎么处理这个message消息的。所以通过这个函数,我们可以知道什么呢?就是发送线程,将它要实现的所有逻辑都实现好了。实现好之后呢,他只不过把这个任务交给了目标线程,让目标线程去执行这个任务。那具体怎么执行?就是按照发送线程给你写好的逻辑去进行执行,所以通过这个dispatch,我们也可以知道。web rtc它整个处理消息的逻辑以及线程之间的关系就非常清楚了,那以上呢,就是我们这节课所要介绍内容,

那在这节课中呢,主要是向你分析了一下。y8 tc最基础的线程切换post方法,它是如何实现的?它的接口是怎么样的?我们如何调用它?在调用之后,它内部是怎样的逻辑目标线程,又是如何处理消息的?整个这套过程向你做了详细介绍。那了解了这个过程之后呢,我们再去看外边线程切换代码就非常容易了,那我们今天的课呢,就到这里,谢谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1156834.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

指纹识别之dns

https://ephen.me/2017/dns-tcp/ https://c.biancheng.net/view/6457.html https://www.jianshu.com/p/b483300378af https://www.cnblogs.com/549294286/p/5172448.html wireshark数据包分析 Packet Details Pane(数据包详细信息), 在数据包列表中选择指定数据包,…

nodejs+vue智慧补助系统的设计与实现-计算机毕业设计

随着网络技术的不断发展,多媒体技术应用渐渐的出现在教育领域中,智慧补助系统已经成为教育发展的一个热门话题。 在众多网络开发技术中,nodejs是当前很热门的一种软件,因为它可以进行数据库操作及方便用户控制管理。 在各学校的教…

广播域与冲突域详解

广播域与冲突域详解 一般普遍认为一个HUB(集线器)就是一个冲突域,而使用交换机就可以隔离冲突域。但是无论是HUB 还是交换机它们都具有广播域。HUB 和交换机的区别:同一个 HUB 的所有端口都在同一个广播域和同一个冲突域内的。而…

NIFI1.23.2_最新版_性能优化通用_技巧积累_随时更新---大数据之Nifi工作笔记0063

nifi好用,但是对机器的性能要求也高,如果性能达不到,就会导致,问题发生,比如,队列里显示有内容,但是实际上队列是空的,清也清不掉,只能重启,很麻烦. 关于优化:1.配置前端页面刷新的间隔时间默认30秒,我们可以自己需要看的时候手动刷新我们改成300sec 2.修改CPU阻塞时间,提高CPU…

C++-实现一个简单的菜单程序

C-实现一个简单的菜单程序 1,if-else语句实现1.1,代码实现1.2,功能检测 2,switch语句实现2.1,代码实现2.2,功能检测 1,if-else语句实现 实现一个简单的菜单程序,运行时显示"Men…

节日活动软文怎么写?媒介盒子为您解答

不管是春节、除夕这类传统节日,还是万圣节、情人节这类舶来节日,又或者是双十一、618这类电商节。品牌方只要在节日中举办活动,都能够提升品牌曝光率,还能有效减少运营时间成本提高效率,节日活动软文能够帮助商家宣传活…

Java实验四

要求:设计一个文字字体设置窗体,在该窗体中可以设置要显示文字的字体内容,包括字体名称、字体大小、粗体和斜体等字体风格。并模拟在不同操作系统下的显示效果。添加事件处理机制,要求实现如下功能: 当在文本框中输入…

C++学习初探---‘C++面向对象‘-继承函数重载与运算符重载

文章目录 前言继承继承是什么?三种访问权限的继承: 函数重载与运算符重载函数重载运算符重载可重载运算符&不可重载运算符 前言 第三次学习记录,依旧是C面向对象的内容。 继承 继承是什么? C中的继承是一种面向对象编程&am…

Spring5学习笔记汇总

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: Spring专栏 ✨特色专栏: M…

[AUTOSAR][诊断管理][ECU][$2F] 通过ID控制IO

文章目录 一、简介服务功能功能描述应用场景服务请求请求格式控制参数(IOCP)请求实例服务响应响应格式正响应实例负响应NRC支持二、 示例代码2f_io_ctl_by_id.c一、简介 2F诊断服务主要在车身域比较常见,比如车窗控制,传感器开关、执行器控制等。 UDS诊断服务协议都以ISO标准…

VM Ware在桥接模式下无法联网

目录 一,说明二,桥接模式下选择对应网卡三,物理机设置静态IP四,虚拟机设置静态IP四,测试 一,说明 VM Ware是一款常用的虚拟软件,我们可以在Windows系统上安装该软件,加载相应的镜像…

【T3】彻底关闭服宝

【问题描述】 畅捷通T3登录后, 右下角会出现服宝窗口,需要手工退出。 但是每次重新登录账套后都会出现,非常烦;并且界面空白。 【解决方法】 在软件的安装目录下\UFSMART\Portal,找到【url.ini】文件。 用记事本打开…

如何用ChatGPT加速生成一份有图有文的简报ppt,实战案例教学

今天小编给大家提供一个小技巧,让大家在让chatgpt帮你写ppt的时候自动把图也配上。 这个prompts经过小编反复调试,达到了一个较好的效果,就是下面这条,大家可以复制发送到我们AI写稿专家公众号里进行生成: 以「个人知…

Unity 粒子特效-第四集-光球闪烁特效

一、特效预览 二、制作原理 光球素材资源 链接:https://pan.baidu.com/s/1XzWpQU2zX_wupMXSW7RxwA?pwdvu5r 提取码:vu5r 1.素材介绍 仔细看,我们的粒子贴图是(如下),一颗球球 2.步骤介绍 1.光球动画的…

PyCharm下载和安装教程(包含配置Python解释器)

PyCharm 是 JetBrains 公司(www.jetbrains.com)研发,用于开发 Python 的 IDE 开发工具。图 1 所示为 JetBrains 公司开发的多款开发工具,其中很多工具都好评如潮,这些工具可以编写 Python、C/C、C#、DSL、Go、Groovy、…

服务器遭受攻击如何处理(记录排查)

本文的重点是介绍如何鉴别安全事件以及保护现场的方法,以确保服务器负责人能够在第一时间对安全攻击做出反应,并在最短时间内抵御攻击或减少攻击所带来的影响。 在服务器遭遇疑似安全事件时,通常可以从账号、进程、网络和日志四个主要方面进…

学习MySQL数据库之前非看不可的一篇文章

目录 1、数据库概念1.1主流数据库 3、基本使用2.1 连接服务器2.2 服务器、数据库、表关系2.3 见见猪跑 3、MySQL架构4、SQL分类 1、数据库概念 数据库(Database)是一个有组织的数据集合,用于存储、管理和检索信息。它是一个计算机系统中的关键…

【错误解决方案】ModuleNotFoundError: No module named ‘zarr‘

1. 错误提示 在python程序,尝试导入一个名为zarr的模块,但Python提示找不到这个模块。 错误提示:ModuleNotFoundError: No module named ‘zarr‘ 2. 解决方案 这可能是因为你尚未安装这个模块或者安装过程中出现了问题。 zarr是一个用于存…

Elasticsearch:从头开始解释带有 Transformer 的生成式 AI 架构

作者:ARIS PAPADOPOULOS 这篇长篇文章解释了生成式人工智能的工作原理,从基础一直到注重直觉的生成式 transformer 架构。 这篇长篇文章解释了生成式人工智能的工作原理,从基础一直到生成式 transformer 架构。 重点是直觉,而不是…

阿里发布AI编码助手:通义灵码,兼容 VS Code、IDEA等主流编程工具

今天是阿里云栖大会的第一天,相信场外的瓜,大家都吃过了。这里就不说了,有兴趣可以看看这里:云栖大会变成相亲现场,最新招婿鄙视链来了... 。 这里主要说说阿里还发布了一款AI编码助手,对于我们开发者来说…