5.6.webrtc三大线程

那今天呢?我们来介绍一下web rtc的三大线程,那为什么要介绍这三大线程呢?最关键的原因在于web rtc的所有其他线程都是由这三大线程所创建的。那当我们将这三个线程理解清楚之后呢?我们就知道其他线程与它们之间是怎样关系,那也就知道了。y8 rtc底层逻辑处理的时候。线程是如何进行切换的?所以了解这三大线程呢?对于我们理解y边儿7c就是非常重要的意义。好,
在这里插入图片描述

那下面呢?我们就来看看外拔tc的三大线程,包括哪三个,

第一个呢?就是信号线程,通过这个名字啊,我们基本上也可以猜到它的作用是什么了。就是用于以应用层进行交互。当应用层调用外部r7c的API的时候,进入到API内部,它就会进行线程的切换,从应用层的线程切换到信号线程。

当它做底层逻辑处理的时候呢,又会从信号线程切换到工作线程,所以这是信号线程的主要作用。

好,那第二个重要的线程呢?就是工作线程,那工作线程的作用是负责内部逻辑的处理。所有底层的核心的逻辑都是由工作线程来完成的。

第三个线程呢?是网络线程,网络线程非常简单,就是负责网络数据包的收发,对吧?那这三个线程之间是怎样的关系呢?

实际上工作线程是最为核心的线程。我们来举一个例子啊。当网络线程收到数据包之后。那它首先要把数据包交给谁呢?

交给工作线程,由工作线程做一些逻辑的处理。比如说。是把这个rtb包包头去掉。然后留里边的pllo的数据。还有将多个rtb包组成一个视频帧,这些工作呢,都是由工作线程来完成的。

那当工作线程处理好这些任务之后呢?比如说应用层要收到一些反馈的信息。那这个时候呢,工作线程会将这个信息交给信号线程,信号线程最终传给应用层。

那现在呢?我们就应该知道那外部rtc这三大线程,它主要干了哪些活儿?那了解了它们的主要功能之后呢?下面咱们就来看一下代码。

看看外边儿tc中是如何启动这三大线程的好,我们切换到Windows系统下。那我们依然是从peer connection client这个项目出发来看一下这三大线程是如何创建的。好,那我们进入到慢点CC的文本函数中,那在这个80行呢?我们先设一个断点。实际上,80行跟81行我们在前面的课程中都向你做过详细介绍,对吧?这两行的主要作用。

就是将当前的主线程与win 3 r three的对象做一次绑定。那绑定的目的是什么呢?一会儿我们就会看到我们先将程序运行起来。好,这个时候呢,程序就执行到了men点CC的80行。那我们单步执行一下啊,当我们执行完81行之后呢,我们来看看。win三二three的对象,它的地址是多少?我们可以通过下边的自动窗口来看一下win 3 r three的对象的地址是三五三f。八那现在呢?我们先把这个地址给它记录下来,那一会儿呢,
在这里插入图片描述

我就会告诉你,我们记这个地址是干什么用的?好,那我们继续执行。连接心理服务器。选择一个我们要通信的对端。这时候呢,程序就执行到了conductor点CC的133行。那我在133行呢,设置了一个断点。那这行代码呢?实际大家应该都非常清楚,我在之前的课程中呢,也向你做过介绍,那它就是创建。

在这里插入图片描述

这个对象对吧?在创建peer connection factory这个对象的时候呢,有三个非常重要参数。分别是网络线程对象,工作线程对象以及信令线程对象。

通过这三个参数啊,我们可以知道,如果我们想自己控制这三个线程,我们就可以将这三个线程。及其对象创建好,那把它当做参数,传到这个API中,那这样呢?在y8 rtc底层,它就会使用我们创建好的三个线程。

进行底层的操作了,那如果我们觉得麻烦,你也可以在这里设置成null。那这样呢,在create peer connection factory内部,它就会自动为我们创建好这三个线程。

所以通过这个API,我们就可以知道这三个线程,就是在create peer connection factory内部创建的,对吧?那下面呢,我们就可以跳到这个API内部来看一下它具体是怎么做的?好,我们继续执行。实际上,

在这个API内部啊。它一开始是将所有的参数打包到了。dependency这个对象中。那之所以要创建这个对象呢,是因为它还要调用底层的逻辑,那底层逻辑我们要传很多参数的话就比较麻烦。还不如将它们都打包到一个对象中,这样我们只要传一个对象就OK了。那这一块逻辑呢就是。将我们的参数一项一项的塞到dependence对象中。当所有的参数都设置好之后呢?
在这里插入图片描述

它会调用create modular peer connection factory,这个方法我们继续执行。那在create modular peer connection factory这个方法中呢,它首先通过new创建了一个peer connection factory对象。
在这里插入图片描述

那么咱们来看一下peer connection factory构造函数中做了哪些事情?那首先呢,它会将dependencies中的这个成员呢,一项一项的拿出来设置到peer connection factory对象中。包括了network three的worker threed。signal three的pass query factory等等等,这一系列的参数对吧?这我们就不看了,那之后呢,在它的主逻辑中首先判断。network three的是否为空?如果为空,它就会在内部调用。
在这里插入图片描述

create with socket server方法。来创建three的对象。当three的对象创建好之后呢,它调用start方法将这个线程启动起来,那现在我们就知道network three的这个对象,它是在哪创建的,以及这个线程。

是如何启动起来的?那关于这个线程,具体内部的启动逻辑呢?我这里就不往下跟了,那后边儿呢?我还会向你做详细介绍,那现在我们只要知道。这一块逻辑就是来启动network three的这个线程的network,three的创建好之后呢,紧接着它会判断。

worker three的那逻辑呢?也是类似的,只不过这次创建three的对象的时候呢,它使用了create方法。而不是create with socket server这个方法,那这两个方法有什么区别呢?关键的一个区别就在于。create with socket server,它是用于处理网络事件的,而create呢,它不处理网络事件,只是一个普通的事件。所以这是它们的一个最大区别。

那除了线程事件不同之外呢,其他地方都是一样的,那它同样通过start来启动这个线程。好,我们继续弹幕执行。
在这里插入图片描述

那第三个呢,它就处理signal three的。通过这句话,我们可以看到啊,对于y8 rtc来说,它默认把应用的主线程当做。信令线程对吧?所以它调了three的current这个方法,那为了更好的了解这段逻辑啊,我们来看一下three的current。这个函数内部它是如何实现的?
在这里插入图片描述

OK,在street current这个API内部呢?他首先获得street manager这个对象。之后呢,调用current three的方法来获取线程对象。那我们再来看看current它做了哪些事情。
在这里插入图片描述

在current three的内部,它只有一行代码,就是调用tls get value这个方法,那这个方法实际我们在上节课向你做过介绍。它作用是从线程本地存储空间中读取,当前线程保存的值这个值呢,实际应该是在之前。通过tls set value来设置的,那如果你现在还记得上节课,

我们介绍的thread manager那张图的话。那你就知道这个函数,它的含义是什么了?好,那现在我们再联想我们之前介绍中的80行和81行的时候,就已经将win三二three的。设置到manager three的对象中了,所以这个时候我们再要用get value这个API,我们就可以将之前。

设置的这个线程呢,给它获取出来,也就是主线程,所以current three的这个API的返回值呢,一定是我们之前创建的这个主线程的。win 3 r three的对象地址对吧?

好,那么我们执行一下,咱们来看一下这个three的,它的地址是多少?就是三五三七f八。至于我们一开始看81行的v3r three的对象的地址是一模一样的,对不对?所以从这一点上,我们就可以看到,通过current这个API对于y八二tc来说,它就拿到了应用程序的主线程。作为它的心灵线程了,那么继续执行好,当这个函数返回之后呢?它赋给了信令线程,(main函数创建的thread作为主线程)
在这里插入图片描述

现在的信令线程就是peer connection clan的,这个应用程序的主线程。好由于此时呢,这个signal three的已经不为空了,那这样呢,就直接跳出去了。那到这个时候呢,我们就将web rtc的三大线程全部创建出来了。好,那再往后,它就会做一次线程的切换,也就是说,从当前线程切换到新的线程,那一块逻辑的切换呢?其实还是蛮复杂的,
在这里插入图片描述

那我会在后边给你做更详细的介绍。对于我们今天的课来说呢,主要就是介绍三大线程的创建。他们是什么时候创建的?创建的位置是在哪?那现在呢?我们都非常清楚了,那以上呢?就是我们这节课。所要向你介绍的内容,在这节课中呢,我向你介绍了y八二tc有三个非常重要的线程,分别是信号线程,工作线程以及网络线程。那另外呢,

在课程中我还通过阅读代码的方式向你介绍了这三大线程是什么时候创建的,对吧?尤其是信号线程。对于我们的一般应用程序来说呢,如果你不做特殊的处理,它就会使用主线程,当做信号线程。但是对这三个线程来说呢,实际我们在写应用程序的时候,可以自己先把它创建好,然后传给外部rtc,让外部rtc用我们创建好的线程来做底层的处理。如果你觉得这种方式比较繁琐的话,你可以直接让y八二tc在底层做线程的创建。是吧,

这都是完全可以的好,那以上呢,就是我们这节课所介绍的内容好,谢谢。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PDF怎么转成PPT文件免费?一个软件解决

随着科技的不断发展和进步,电子文档已经成为我们日常工作和学习中不可或缺的一部分。PDF作为一种跨平台的文件格式,以其可靠性和易读性而备受推崇。然而,在某些情况下,我们可能需要PDF怎么转成PPT文件免费,以便更好地展…

day24

复制目录到指定路径 file-App下的src目录复制到 D:/aaa public static void copy(File src, File dest) throws IOException {//0. 创建出目标路径if (!dest.exists()){dest.mkdirs();}//0.0 判断dest是否存在,如果不存在,创建爱你出来,不能复…

糖尿病视网膜病变,黄斑病变,年龄相关检测研究(Matlab代码)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

DataWindowHTTP在linux环境的安装和测试

DataWindowHTTP在linux环境的安装和测试 *此非必要文档,如果在window环境使用,则无需参考。对于linux os,apache,php安装熟悉的朋友,也无需参考此文档的安装部分,只需要参考配置部分即可。 *最后修改日期…

图片怎么转换成pdf格式?可以试试这样转换

图片怎么转换成pdf格式?图片转换成PDF格式是一个常见的需求,无论是为了方便存储还是为了分享文件,将图片转换成PDF格式都是一个不错的选择。有许多软件和在线工具可以帮助你完成这个任务,下面就给大家介绍一款转换工具。 【迅捷PD…

两款开箱即用的Live2d

目录 背景第一款:开箱即用的Live2d在vue项目中使用html页面使用在线预览依赖文件地址配置相关参数成员属性源码 模型下载 第二款:换装模型超多的Live2d在线预览代码示例源码 模型下载 背景 从第一次使用服务器建站已经三年多了,记得那是在2…

统一git使用方法,git状态变迁图,git commit提交规范

目录 说明 统一git使用方法 git状态变迁图 git commit 提交规范 说明 多次工作中多名员工不懂git多次技术分享,自行查资料学习git并使用,会出现使用各种偏僻的命令,异常问题无法解决;或出现带url的git合并提交。主要是学的不…

抖音短视频矩阵系统源码开发搭建技术开源分享

前言:抖音矩阵号/抖音短视频SEO矩阵系统源码开发,优化排名。 短视频获客系统支持短视频智能剪辑、短视频定时发布,短视频排名查询及优化,智能客服等,那么短视频seo系统开发时需要开发哪些功能呢?今天我就跟…

【CSS Grid网格布局】常用属性,示例代码解读

Grid布局是一种二维布局系统,可以将页面划分为行和列,并将元素放置在这些行和列的交叉点上。以下是Grid布局的一些常用属性: grid-template-columns/grid-template-rows:用于定义网格的列和行的大小和数量。可以指定具体的尺寸值…

STP知识总结

目录 生成树协议 导致问题 生成树 存在算法 1、802.1D 接口状态 收敛时间 结构变化 802.1D 缺点 2、PVST cisco私有 3、PVST 缺点 4、快速生成树 快速原理 边缘接口 5、MSTP/MST/802.1S 生成树协议 生成树协议是一种工作在OSI网络模型中第二层(数据链路层…

(排序) 剑指 Offer 51. 数组中的逆序对 ——【Leetcode每日一题】

❓剑指 Offer 51. 数组中的逆序对 难度:困难 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 示例 1: 输入: [7,5,6,4] 输出: 5 限制&#xff…

生产环境下的终极指南:使用 Docker 部署 Nacos 集群和 MySQL

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

3种清除logo的方法,使其干净整洁 自然无痕

信息爆炸的时代,我们每天都和图片打交道经常会遇到一些带有水印的图片。这些水印可能是品牌的标志或者是版权信息,但有时候它们会干扰到我们对图片的欣赏和使用。那么,怎么去掉图片logo水印呢? 毕竟影响图片美感,使用也不方便&a…

eNSP综合小实验:VRRP、MSTP、Eth-Trunk、NAT、DHCP等技术应用

完成下图要求: 拓扑图: 配置命令: 由于交换机日志太多不便于复制,所以就复制命令。大概步骤如下: 第一步先分配IP地址,在sw1和sw2上创建VLAN100用于e0/0/3口配IP,在sw1、sw2、sw3、sw4上创建VL…

七夕节日表白:七大网页风格与其适用人群

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

【Spring Boot】JdbcTemplate数据连接模板 — 使用JdbcTemplate操作数据库

使用JdbcTemplate操作数据库 成功在Spring Boot项目中集成JdbcTemplate后,如何使用JdbcTemplate数据库连接模板操作数据库呢?接下来以示例演示JdbcTemplate实现学生信息的增、删、改、查等操作,让我们在实践中边学边用,更好地理解…

【算法刷题之数组篇(2)】

目录 1.leetcode-35. 搜索插入位置(简单)2.leetcode-74. 搜索二维矩阵(中等)3.leetcode-73. 矩阵置零(中等)4.leetcode-56. 合并区间(中等)5.leetcode-54. 螺旋矩阵(中等…

opencv进阶11-LBPH 人脸识别(人脸对比)

人脸识别的第一步,就是要找到一个模型可以用简洁又具有差异性的方式准确反映出每个人脸的特征。识别人脸时,先将当前人脸采用与前述同样的方式提取特征,再从已有特征集中找出当前特征的最邻近样本,从而得到当前人脸的标签。 OpenC…

电子电路学习笔记之SA1117BH-1.2TR——LDO低压差线性稳压器

关于LDO调节器(Low Dropout Regulator)是一种电压稳压器件,常用于电子设备中,用于将高电压转换为稳定的低电压。它能够在输入电压和输出电压之间产生较小的差异电压,因此被称为"低压差稳压器"。 LDO调节器通…

【vue】更改角色权限后,实现页面不刷新更改其可展示的导航菜单

登入的角色本身属于领导级别(集团权限),没有下级的不同权限: 切换不同身份(公司),以获得相应部门的不同导航菜单及权限 这里实现:更改角色权限后,实现页面 不刷新 更改…