5.4 webrtc的线程

那今天呢?我们来了解一下webrtc中的threed,首先我们看一下threed的类,它里边儿都含了哪些内容?由于threed的类非常大啊,我们将它分成两部分。

那第一部分呢,是我们看threed的类中都包含了哪些数据之后呢?我们再来看看threed的类中包含了哪些方法?那首先我们来看一下数据,之前呢,我在常见的线程模型中,曾经向你介绍过,一般呢,我们在使用线程的时候呢,都要增加一些队列,对吧?

对于web rtc的thread也不例外。那在这个类中呢,首先包含了一个message list,这个对象那通过这个对象呢,我们就知道threed的它是包含队列的。也就是说,所有需要线程处理的消息呢,都要先入队。

之后呢,再由这个线程一个一个的进行处理,这样可以保证它的每一个message都可以得到响应,并且呢,是有序的响应。对于y8 tc的threed的类来说呢,除了message之外,它还有一个delay的message处于这里边儿的所有消息呢,都是延后处理的消息。

那这个我们简单了解一下就OK了,所以从这里我们也可以知道啊,对于外边汽车来说,它除了有一个消息队列之外呢,还包括了一个延迟处理消息的队列,从这一点上我们就可以看出所有的类,它的功能是非常强大的。好,

那再接下来的一个成员呢?是security section,那这就是临界区了,对吧?它的作用呢,是用于防止访问队列时候发生冲突,也就是说,无论是message还是delete message。

都要根据临界区进行插队入队,当我们要往这个队列中塞数据的时候呢,首先获取临界区。获取到临界区之后呢,再插入数据。那取数据呢,也是同样道理。也要先获取临界区之后呢,才能从消息队列中取出消息,那这是非常简单的道理,这是第一部分数据。

第二部分数据呢,是对于外部rtc的threed的类来说,它是可以进行时间处理的,所以它包含了一个socket server。socket server可能会给大家带来一些困扰,同学可能会觉得,哎,那为什么一个客户端的程序会有一个socket server呢?其实这里的socket server,它的功能呢,就是用于事件处理,那之所以取这个名字,

是因为一般情况下,我们是在服务端使用事件处理。所以在wrtc的开发者呢,可能是沿用了这个习惯,所以给它起了一个叫socket server,实际你就知道它是一个事件处理类就OK了。

好,那最后一部分数据呢?就是线程那我们的threed的类中包含了,我们真正处理数据的线程。在WINDOWS下呢,是handle那在linux下呢,它这个类型是thread ctrl t好,这是数据部分,那接下来呢,
在这里插入图片描述

我们再看看。threed的类中的重要方法,它里边包括的方法非常多。那我讲重要的分成了三部分,
在这里插入图片描述

那第一大部分呢?我们先看后边儿就是对线程的控制启动、运行、以及线程的停止。这三个函数呢,是我们每一个线程都需要有的,对吧?好,那上面的这些方法呢,又可以分成两部分,其中get与pick。是用于对队列的操作,从队列中取数据,

而post post ta sks ks and invoke,那这些呢?是用于线程切换的,我们也知道,为了提高效率,它采用了多线程,不同的线程呢,完成不同的工作。线程之间呢,就要做各种的切换。从a线程切到b线程b线程切到c线程,这都是经常发生的事儿,如何才能进行高效的切换呢?实际上,对于y8 tc的类来说,

它提供了很多方法,那这里我简单的列出了几个。post post task send invoke对吧?那对于这些API的具体的作用,我会在后边的课程中呢给你做详细介绍。那现在我们只要知道,对于web rtc的threed的来说,它的方法呢,也包括了三大类。

第一大类呢,是对队列的获取。第二大类呢,是线程的切换。第三大类呢,是线程的控制。

那以上呢,就是threed的类的一些重要数据和方法,接下来呢,我们看关于threed的几个要点。第一个要点呢,我们要知道web rtc中的它thread是一个对象,并不是一个真正运行的线程。但是在threed的对象中呢,是持有了现成的句柄。这个我们要知道,比如我们在代码中看到某某某threed的,你就认为它是一个线程了,并不是对吧。

它只是一个对象。那具体这个线程是什么时候启动的?它是怎么运行的?我们还要根据里边儿的内容去详细的看才能知道。这是我们第一个要知道的,

那第二个是web rtc中的线程,它是有队列的,刚才我们已经介绍到了,对吧?

第三个呢是web rtc中的线程,是以事件驱动的。也就是说,外拔tc的线程呢?当收到事件通知之后,才去队列中获取消息。那么,拿到消息之后呢?再进行具体的操作。

它是这样一个逻辑,这种线程的驱动方式肯定要比我们轮巡的方式要好的多,对吧?如果我们采用轮巡的方式,不停的去队列中。轮询是否有数据,那它这种性能呢?肯定是低效的,而事件的方式呢?是非常高效的。这是关于threed的几个要点,那了解了threed的几个要点之后呢?下面我们来看看线程的创建。那首先我们要知道,

对于不同的平台,它创建线程的方法肯定是不一样的,每个平台有每个平台。不同的API那像linux和mac,它使用的都是p方法,也就是p threed的create。通过这个API来创建线程,而对于WINDOWS来说呢,它使用的是create threed的这个方法来创建线程。这一点呢,其实大家应该都非常了解了,对吧?

好,那接下来呢,我们就来看一下代码,了解一下y八二tc的threed的类,它长什么样子?我们切换到WINDOWS平台。那首先啊,我们还是打开peer connection client这个项目,那在这个项目中呢,
在这里插入图片描述

我们找到内文件。在闷文件中的温闷方法中呢?我们看第80行,那这个呢?就是一个。threed的对象对吧?它是一个win 32 threed的,也就是说对于外8 tc来说,不同的平台,

它都对threed的做了一层封装,他们这些子类呢,都继承自。threed的类,我们可以跳进去看一下啊,这个时候呢,它就查找到两个地方,一个是点h,一个是点CC,对吧?我们先到点h。OK,从这里我们可以看到啊,135行win三二threed的就继承自threed的,那我们继续进入到threed的的定义。
在这里插入图片描述

就是在这里,那在threed的点h中的168行就是threed的类的定义,我们可以简单过一下,看看这个类它是怎么定义的?那首先呢,它是继承自t ask que base这个类对吧?那在这个类中呢?实际只定义了一些方法,这里呢?我先不看了。后边我们需要的时候,我们再看这个类,它是怎么定义的?好,我们可以简单过一下,

在这里插入图片描述
那在一开始的时候呢,定义了几个构造函数,那我们可以根据情况呢,在创建的对象的时候给它传入不同的参数。有socket server指针型的,还有这种智能指针型的,还有呢指针型加一个。doin it这个参数了。智能指针型加do I it这个参数对吧?那它支持的构造函数类型呢?还是比较多的好,再往下。那再接下来的这两个方法呢,实际是创建s对象,它提供了两个静态的方法,
在这里插入图片描述

一个是create with socket server。一个呢是create,那这两种方法呢?都可以创建出threed的对象,后边儿呢?我们这两种方法都会用到,到时候呢,我们再看看它们的细节。再接着往下走,接下来呢,是threed的类中的子类,这些子类呢,我们暂时先不管,就直接跳过去是吧?之后呢,
在这里插入图片描述

是threed的类控制线程的一些方法,包括quit is quitting。restart都是定义在这里,在后边呢,是与队列相关的,从队列中获取消息,一个get一个pick。那这两种方法的区别,后边儿我们也会做详细介绍好,再往下就是post post delayed对吧?等等,一系列的与线程切换相关的,那这些呢,我们就不详细看了,我们继续往下走。

这里还有start。stop都是用于控制线程的启动与停止的。runs end,刚才我们已经介绍了,那后边呢?我们还会对这个方法呢?做详细介绍。还有invoke invoke呢,包括多种重载。可以存放不同的参数。实际上,关于threed的类中的很多细节呢,我们都可以看一些注释,在这个threed的类中呢,包含了大量的注释。

这些注释呢,其实对于我们阅读代码都是有非常重要意义的,所以大家可以仔细看一下这块儿的注释。好再往下呢,是post task对吧?post delay task可能这些方法呢?都是在这儿定义的好,我们继续往下啊。这些方法我们就不介绍了,那在类中呢?定义了很多的子类,那这些子类呢?也有它的用处。我们现在用不到,先给它过滤掉这个类还是非常庞大的,

对吧?大概有五六百行代码了,那再接下来呢,就是threed的类中的一些数据成员了。那我们刚才看到的message delay的message。都是在这里定义的,包括了临界区。还有用于事件处理的socket server。以及与线程关联的thread,对于线程来说呢,不同的平台是有不同的类型的。像posix,它使用的是p threed的杠t,那window呢?是使用的handle对吧?
在这里插入图片描述

那当然threed的还跟threed的manager?是有关联的,那threed manager呢?是对threed的线程的管理,那后边儿呢?我也会对threed的manager做详细的介绍。通过查看这个类啊,我们可以知道threed的类是非常庞杂的,对吧?里边包括了很多信息,但你总结起来啊,实际就几大类。

那一大类呢,是与队列相关的一大类呢,是与事件相关的,

那再有呢,就是与线程相关的,这些数据对吧?除了这些之外呢,对于它提供的方法实际也是类似的,

首先是控制线程的,从队列中获取消息的。

线程的切换以及事件的处理对吧?就是这样几大类,

如果我们光看这个代码没有对它进行分类的话,我们会觉得threed的类。太庞杂了,看着都头疼,对吧?但如果你把它按分类进行划分之后,

你就觉得这个类其实也没有那么复杂。归结起来,就是对队列的处理,对事件的处理,对线程的处理,无非就是这几项,对吧?那以上呢,就是我们对web rtc threed的类的一些简要的介绍。那么,了解了这些知识之后呢?

我们后边再逐步的深入,让你详细的知道web rtc是如何进行。线程控制的线程管理的,当我们最后讲完这一章的内容之后呢,

你就知道y八二tc它的线程到底是如何工作的了。好,那我们今天的课程呢?就到这里有任何的问题呢,您可以到讨论区或者是群里去给我留言,我在那里呢,给你做相应解答好,谢谢。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【HTML】基础语法讲解

基础语法 1. HTML 结构1.1 认识HTML标签1.2 HTML 文件基本结构1.3 标签层次结构1.4 快速生成代码框架 2. HTML 常见标签2.1 注释标签2.2 标题标签:h1-h62.3 段落标签:p2.4 <br>换行标签2.5 格式化标签2.6 图片标签&#xff1a;img2.7 超链接标签&#xff1a;a2.8 表格标签…

Vue2.0+webpack 引入字体文件(eot,ttf,woff)

webpack.base.config.js 需要配置 {test:/\/(woff2?|eot|ttf|otf)(\?.*)?$/,loader: url-loader,options: {limit: 10000,name: utils.assetsPath(fonts/[name].[hash:7].[ext])}} 如果 Vue2.0webpack3.6引入字体文件&#xff08;eot&#xff0c;ttf&#xff0c;woff&…

自己搭建Minecraft服务器并通过cpolar内网穿透实现与公网小伙伴联机我的世界

文章目录 1. Java环境搭建2.安装我的世界Minecraft服务3. 启动我的世界服务4.局域网测试连接我的世界服务器5. 安装cpolar内网穿透6. 创建隧道映射内网端口7. 测试公网远程联机8. 配置固定TCP端口地址8.1 保留一个固定tcp地址8.2 配置固定tcp地址 9. 使用固定公网地址远程联机 …

YUV图片查看器以及测试文件(YUV420)

参考文章&#xff1a;YUV格式的图片查看工具YUView 2.13 亲测可用 在windows上解压打开即可 需要输入一下宽高&#xff0c;如果格式不对&#xff0c;需要设置下格式 还可以看像素分量值&#xff0c;爽歪歪 YUV查看器和YUV测试文件 文章目录 20230816YUV图片查看器及其测试文…

BSN与中国食品药品企业质量安全促进会达成战略合作协议

2023年8月18日至20日&#xff0c;“首届中国食品药品医疗器械化妆品高质量发展大会”在北京召开&#xff0c;本届大会以“树立新发展理念&#xff0c;服务构建新发展格局&#xff0c;助力食药行业高质量发展”为主题&#xff0c;聚焦食药监管和行业发展的热点、难点问题&#x…

Redis下载与安装

文章目录 Redis简介下载&#xff0c;安装和配置&#xff08;cmd&#xff09;图形化工具 Redis 简介 下载&#xff0c;安装和配置&#xff08;cmd&#xff09; 开启redis服务 1.在解压出来的文件夹中打开cmd 2.输入 redis-server.exe redis.windows.conf即可开启服务 可以看到…

洗涤护理门店小程序DIY制作教程

随着移动互联网的快速发展&#xff0c;小程序成为了各行各业推广和服务的新平台。对于干洗店来说&#xff0c;拥有一个专属的洗护小程序不仅可以提升用户体验&#xff0c;还能增加店铺的曝光度和销售额。那么&#xff0c;如何DIY制作一个干洗店洗护小程序呢&#xff1f; 首先&a…

Android获取手机已安装应用列表JAVA实现

最终效果: 设计 实现java代码: //获取包列表private List<String> getPkgList() {List<String> packages new ArrayList<String>();try {//使用命令行方式获取包列表Process p Runtime.getRuntime().exec("pm list packages");//取得命令行输出…

rabbitmq卸载重新安装3.8版本

卸载之前的版本的rabbitmq 卸载rabbitmq 卸载前先停止rabbitmq服务 /usr/lib/rabbitmq/bin/rabbitmqctl stop查看rabbitmq安装的相关列表 yum list | grep rabbitmq卸载rabbitmq相关内容 yum -y remove rabbitmq-server.noarch 卸载erlang 查看erlang安装的相关列表 …

【LeetCode-中等题】189. 轮转数组

题目 题解一&#xff1a;开辟数组 取模运算寻找位置(ik)mod n 新位置 思路&#xff1a;通过&#xff0c;开辟数组 取模运算寻找新位置------位置(ik)mod n 新位置 int[] newNums new int[nums.length];for(int i 0;i<nums.length;i){newNums[(ik)%nums.length] nums[i…

【力扣】42. 接雨水 <模拟、双指针、单调栈>

【力扣】42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 目录 【力扣】42. 接雨水题解暴力双指针单调栈 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&…

QCC_BES 音频重采样算法实现

+V hezkz17进数字音频系统研究开发交流答疑群(课题组) 这段代码是一个用于将音频数据进行立体声重采样的函数。以下是对代码的解读: 函数接受以下参数: pcm_buf:16位有符号整型的音频缓冲区,存储了输入的音频数据。pcm_len:音频缓冲区的长度。mic1:16位有符号整型的音频…