5.13.Post方法进行线程切换

2023-11-01 09:52

本文主要是介绍5.13.Post方法进行线程切换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在上节课中呢,我向你介绍接口调用过程中啊,曾经看到过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方法,它是如何实现的?它的接口是怎么样的?我们如何调用它?在调用之后,它内部是怎样的逻辑目标线程,又是如何处理消息的?整个这套过程向你做了详细介绍。那了解了这个过程之后呢,我们再去看外边线程切换代码就非常容易了,那我们今天的课呢,就到这里,谢谢。

这篇关于5.13.Post方法进行线程切换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/322179

相关文章

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Java中的工具类命名方法

《Java中的工具类命名方法》:本文主要介绍Java中的工具类究竟如何命名,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java中的工具类究竟如何命名?先来几个例子几种命名方式的比较到底如何命名 ?总结Java中的工具类究竟如何命名?先来几个例子JD

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen