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它的线程到底是如何工作的了。好,那我们今天的课程呢?就到这里有任何的问题呢,您可以到讨论区或者是群里去给我留言,我在那里呢,给你做相应解答好,谢谢。
相关文章:
5.4 webrtc的线程
那今天呢?我们来了解一下webrtc中的threed,首先我们看一下threed的类,它里边儿都含了哪些内容?由于threed的类非常大啊,我们将它分成两部分。 那第一部分呢,是我们看threed的类中都包含了哪些数据之后呢&a…...
vscode | linux | c++ intelliense 被弃用解决方案
每日一句,vscode用的爽是爽,主要是可配置太强了。如果也很会研究,可以直接去咸鱼接单了 废话少说,直接整。 用着用着说是c intelliense被弃用,很多辅助功能无法使用,像查看定义、查看引用、函数跳转、智能提…...
HPE服务器常见报错信息以及解决方案
General controller issues 常规控制器问题 Controllers are no longer redundant 控制器不再冗余 HPE Dynamic Smart Array B140i drives are not found when RAID mode is disabled 禁用 RAID 模式时找不到 HPE 动态智能阵列 B140i 驱动器 Data located on drives accessed i…...
尚硅谷宋红康MySQL笔记 3-9
我不会记录的特别详细 大体框架 基本的Select语句运算符排序与分页多表查询单行函数聚合函数子查询 第三章 基本的SELECT语句 SQL分类 这个分类有很多种,大致了解下即可 DDL(Data Definition Languages、数据定义语言),定义了…...
Leetcode.2337 移动片段得到字符串
题目链接 Leetcode.2337 移动片段得到字符串 rating : 1693 题目描述 给你两个字符串 start 和 target ,长度均为 n n n 。每个字符串 仅 由字符 L、R 和 _ 组成,其中: 字符 L 和 R 表示片段,其中片段 L 只有在其左侧直接存在一…...
【vue】更改角色权限后,实现页面不刷新更改其可展示的导航菜单
登入的角色本身属于领导级别(集团权限),没有下级的不同权限: 切换不同身份(公司),以获得相应部门的不同导航菜单及权限 这里实现:更改角色权限后,实现页面 不刷新 更改…...
【G-LAB】网络工程师常用排错命令详细版
网络工程师在日常配置中难免出现各种配置错误,比如接口地址配错、掩码位数配错、接口忘记no shutdown。除去这些基础错误,在配置各种路由选择协议时也会因为网络类型、邻居类型、区域和路由器层级等各种问题使邻居无法建立、路由无法传递进而导致网络不通…...
Linux 桌面版关闭GUI桌面环境
持久打开和关闭 通过CtrlAltF1-F6快捷键进入命令行界面 执行以下命令,持久关闭Ubuntu桌面版的GUI环境: sudo systemctl set-default multi-user.target执行以下命令,持久开启Ubuntu桌面版的GUI环境 通过CtrlAltF7快捷键进入GUI界面 sudo s…...
ChatGPT能代替搜索引擎吗?ChatGPT和搜索引擎有什么区别?
ChatGPT和搜索引擎是两种在信息获取和交流中常用的工具,ChatGPT是一种基于人工智能技术的聊天机器人,而搜索引擎是一种在互联网上搜索信息的工具。尽管它们都是依托互联网与信息获取和交流有关,部分功能重合,但在很多方面存在着明…...
PHP海外代购管理系统mysql数据库web结构apache计算机软件工程网页wamp
一、源码特点 PHP 海外代购管理系统是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 代码下载 https://download.csdn.net/download/qq_41221322/88229435 论文 https://…...
游戏反外挂方案解析
近年来,游戏市场高速发展,随之而来的还有图谋利益的游戏黑产。在利益吸引下,游戏黑产扩张迅猛,已发展成具有庞大规模的产业链,市面上游戏受其侵扰的案例屡见不鲜。 据《FairGuard游戏安全2022年度报告》数据统计&…...
基于郊狼算法优化的BP神经网络(预测应用) - 附代码
基于郊狼算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于郊狼算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.郊狼优化BP神经网络2.1 BP神经网络参数设置2.2 郊狼算法应用 4.测试结果:5.Matlab代码 摘要…...
【腾讯云 TDSQL-C Serverless 产品测评】全面测评TDSQL-C Mysql Serverless
全面测评TDSQL-C Mysql Serverless 文章目录 全面测评TDSQL-C Mysql Serverless前言什么是TDSQL-C Mysql Serverless初始化 TDSQL-C Mysql Serverless新建数据库建立数据表开启外网访问 兼容性SQL文件 导入导出navicat 直接在线传输 构建测试环境准备Python测试脚本准备 Jmeter…...
Qt应用开发(基础篇)——纯文本编辑窗口 QPlainTextEdit
一、前言 QPlainTextEdit类继承于QAbstractScrollArea,QAbstractScrollArea继承于QFrame,是Qt用来显示和编辑纯文本的窗口。 滚屏区域基类https://blog.csdn.net/u014491932/article/details/132245486?spm1001.2014.3001.5501框架类QFramehttps://blo…...
数据结构-->栈
💕休对故人思故国,且将新火试新茶,诗酒趁年华💕 作者:Mylvzi 文章主要内容:详解链表OJ题 前言: 前面已经学习过顺序表,链表。他们都是线性表,今天要学习的栈也是一种线…...
强训第36天
C D C 193--1100 0001 194--1100 0010 196--1100 0100 198--1100 0110 能包括全部的且最小的为 1100 0xxx xxx为主机号,站三位 B MAC地址是绑定网卡的,全球唯一 D A C D IP网段 17为网络号 所以是 40.15.1aaa aaa(7位主机号).0 因为要划分2个子网 所以…...
PyTorch bug记录
1、RuntimeError: Input type (torch.FloatTensor) and weight type (torch.cuda.FloatTensor) should be the same 这个错误是因为模型的权重是在GPU上,但是输入数据在CPU上。在PyTorch中,Tensor的类型和所在的设备(CPU或GPU)需…...
js中的正则表达式(一)
目录 1.什么是正则表达式 2.正则表达式在JavaScript中的使用场景: 3.正则表达式的语法: 1.什么是正则表达式 正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象通常用来查找、替换那些符…...
免费开源使用的几款红黑网络流量工具,自动化的多功能网络侦查工具、超级关键词URL采集工具、Burpsuite被动扫描流量转发插件
免费开源使用的几款红黑网络流量工具,自动化的多功能网络侦查工具、超级关键词URL采集工具、Burpsuite被动扫描流量转发插件。 #################### 免责声明:工具本身并无好坏,希望大家以遵守《网络安全法》相关法律为前提来使用该工具&am…...
使用Mybatis Plus进行DAO层开发
一、特性 Mybatis应该大家现在都知道,而且在项目中都在使用,因为这块ORM框架让大家能专心业务SQL的编写,数据库的连接,连接池的使用都不用关心,极大的提高了生产效率。 今天要给大家介绍的另外一款ORM框架࿰…...
Android中如何不编译源生模块
如果想让自己的app 替换系统的app 比如使用闪电浏览器替换系统的Browser 首先把闪电浏览器放到 vendor/rockchip/common/apps Android.mk LOCAL_PATH : $(call my-dir) include $(CLEAR_VARS)LOCAL_MODULE : Lightning LOCAL_SRC_FILES : $(LOCAL_MODULE).apk LOCAL_MODULE_C…...
安装Vue_dev_tools
Vue控制台出现Download the Vue Devtools extension for a better development experience: 下载Vue_dev_tools,这里给出网盘链接,有Vue2和Vue3的,dev_tools 以Google浏览器为例 点击设置(就是那三个点)->扩展程序->管理扩…...
【数据结构入门指南】二叉树顺序结构: 堆及实现(全程配图,非常经典)
【数据结构入门指南】二叉树顺序结构: 堆及实现(全程配图,非常经典) 一、前言:二叉树的顺序结构二、堆的概念及结构三、堆的实现(本篇博客以实现小堆为例)3.1 准备工作3.2 初始化3.3 堆的插入3.3.1 向上调…...
css实现三角形的几种方法
css实现三角形的方法:1、使用边框实现三角形,利用透明边框和实色边框的组合,可以创建不同方向和大小的三角形;2、使用伪元素实现三角形,通过使用伪元素来创建一个占据父元素一半大小的实心三角形;3、使用tr…...
❤ Vue工作常用的一些动态数据和方法处理
❤ Vue工作常用的一些动态数据和方法处理 (1)动态拼接相对路径结尾的svg 错误写法一 ❌ 正确写法 🙆 <img :src"require(/assets//amazon/svg/homemenu${index}.svg)" style"height: 20px;display: block;margin: 0 au…...
SQLite的命令用法
学习数据库直达网站 https://www.runoob.com/sqlite/sqlite-tutorial.html(菜鸟教程) 这里只分享,基础操作,数据库创建打开……等等 用到查菜鸟教程即可 文章目录 学习数据库直达网站创建一个数据库方式1方式2 创建一个表格插入一…...
在jupyter notebook中使用海龟绘图
首先,安装ipyturtle3 ref:ipyturtle3 PyPI pip install ipyturtle3然后,安装ipycanvas ipycanvas是一个需要安装在与JupyterLab实例相同环境的包。此外,您需要安装nodejs,并启用JupyterLab ipycanvas小部件。 所有这些都在ipy…...
密码学学习笔记(十八):Diffie–Hellman (DH) 密钥交换
DH算法是第一个密钥交换算法,也是第一个得到形式化描述的公钥密码算法。 群论 DH密钥交换算法基于数学中的群论,群论也是当今大多数公钥密码的基础。 要使集合及其运算成为一个群,需要满足以下性质: 封闭性:群中两…...
Linux —— 进程间通信(管道)
目录 一,进程间通信 二,管道 匿名管道 命名管道 一,进程间通信 进程间通信(IPC,InterProcess Communication),即在不同进程之间进行信息的传播或交换;由于一般进程用户地址空间是…...
python常用
环境配置 conda Conda自动补全 在终端激活conda环境的时候按tab不能自动补全activate和环境名。安装后可用tab进行补全。 安装 conda-bash-completion 插件:GitHub 安装方法: conda install -c conda-forge conda-bash-completion常用命令 #创建虚拟…...
潍坊网站制作公司/营销伎巧第一季
2019独角兽企业重金招聘Python工程师标准>>> 硬件支持层 硬件支持层(Hardware support layer),介于操作系统与硬件之间。为什么要有硬件支持层?是为了隔离不同的硬件架构,并且是操作系统能够移植方便。 在v…...
xdebug wordpress/网络公司排名
windows server 2003服务器上邮件服务器的认证问题关于windows server 2003上如何利用自身的组件来配置邮件服务器的方法网上已经有很多,这里不再讨论,我在这里简单说了server03自带邮件服务器的认证问题。假设计算机有2个账户,1个test1,另一…...
苹果开发者官网ios17/宁波seo网络推广主要作用
转载:http://blog.csdn.net/lailai186/article/details/8770643 事情的导火线是GIF图片的显示. 在应用程序中, 利用三方的GIFImage.pas可以很好的显示GIF图片.这次, 要在一个DLL中显示一个GIF图片. 还是像往常一样拖个TImage放到窗体上, 打开一个动态GIF图片. 编译,…...
厦门专业建站系统制作公司/北京做网站推广
本节书摘来华章计算机《电路分析导论(原书第12版)》一书中的第2章 ,第2.4节,(美) Robert L.Boylestad 著 陈希有 张新燕 李冠林 等译更多章节内容可以访问云栖社区“华章计算机”公众号查看。 2.4 电流…...
酒泉住房和城乡建设委员会网站/疫情最新消息今天公布
当前,政务信息孤岛现象已经成为制约简政放权、放管结合、优化服务改革的重要因素。所谓政务信息孤岛,是指政务信息数据被分割存储在不同部门的信息系统中,无法实现互联互通、互相分享、整合利用,难以为居民、企业和社会组织等提供…...
互联网创意网站有哪些/兰州网站开发公司
网页 资讯 视频 图片 知道 文库 贴吧 采购 地图 | 文库首页 登录 VIP新客立减2元 上传文档 意见反馈北理工网上作业答案 搜索文档 ¥16 购买文档 登录 VIP新客立减相关文档北理工C语言编程网上作业答案金牌店铺幼儿读物 幼儿教育4.5分 6755阅读北理工C语言编程网上作…...