5.4 webrtc的线程

news2024/10/1 9:35:31

那今天呢?我们来了解一下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.coloradmin.cn/o/905462.html

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

相关文章

linux设备驱动:kset、uevent、class

目录 kset:驱动的骨架 kset_create_and_add()函数 设备驱动模型实验2-kobject点灯(加入kset) kset.c文件 Makefile文件 执行过程 uevent:内核消息的快递包 uevent机制 kobject_uevent()函数 设备驱动模型实验3-kobject点…

AMBA总线协议(3)——AHB(一)

目录 一、前言 二、什么是AHB总线 1、概述 2、一个典型的基于AHB总线的微处理器架构 3、基本的 AHB 传送特性 三、AMBA AHB总线互联 四、小结 一、前言 在之前的文章中我们初步的了解了一下AMBA总线中AHB,APB,AXI的信号线及其功能,从本文开始我们…

NOIP2014普及组复赛 珠心算测验 螺旋矩阵 真题答案

珠心算测验 说明 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练, 既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。 某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他…

wustoj2006后天

#include <stdio.h> int main() {int n;scanf("%d",&n); printf("%d",(n2)%7);return 0;}

星际争霸之小霸王之小蜜蜂(一)--窗口界面设计

目录 前言 一、安装pygame库 1、pygame库简介 2、在windows系统安装pygame库 二 、搭建游戏框架 1、创建游戏窗口 2、改变窗口颜色 总结 前言 大家应该都看过或者都听说过python神书“大蟒蛇”&#xff0c;上面有一个案例是《外星人入侵》&#xff0c;游戏介绍让我想起了上…

上位机系统(系统的架构、串口的使用、协议的定义、开发环境的配置)

上位机系统 1. 系统架构 实机拓扑架构 硬件支持 使用 VSPD 6.9 实现&#xff1a; 效果图 当状态值超过警戒值&#xff0c;就会变成红色&#xff0c;同时在界面的上方显示红色的“设备告警” 3. 串口电气特性 波特率&#xff1a;19200 数据位数&#xff1a;8 位 u 奇偶校验&…

shell脚本之函数

shell函数 函数的组成&#xff1a;函数名和函数体 函数的格式 function 函数名 { 命令序列 } function cat {cat /etc/passwd}函数名() { 命令序列 } cat () {cat /etc/passwd}function 函数名 (){ 命令序列 } function cat() {cat /etc/passwd}函数相关命令 declare -F #查…

记录每日LeetCode 2236. 判断根结点是否等于子结点之和 Java实现

题目描述&#xff1a; 给你一个 二叉树 的根结点 root&#xff0c;该二叉树由恰好 3 个结点组成&#xff1a;根结点、左子结点和右子结点。 如果根结点值等于两个子结点值之和&#xff0c;返回 true &#xff0c;否则返回 false 。 初始代码&#xff1a; /*** Definition f…

Cpp学习——类与对象3

目录 一&#xff0c;初始化列表 1.初始化列表的使用 2.初始化列表的特点 3.必须要使用初始化列表的场景 二&#xff0c;单参数构造函数的隐式类型转换 1.内置类型的隐式类型转换 2. 自定义类型的隐式类型转换 3.多参数构造函数的隐式类型转换 4.当你不想要发生隐式类型转换…

7-7 找最小的字符串

分数 15 全屏浏览题目 切换布局 作者 张泳 单位 浙大城市学院 本题要求编写程序&#xff0c;针对输入的N个字符串&#xff0c;输出其中最小的字符串。 输入格式&#xff1a; 输入第一行给出正整数N&#xff1b;随后N行&#xff0c;每行给出一个长度小于80的非空字符串&…

js 中的原型

JavaScript规定&#xff0c;每一个构造函数都有一个prototype属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象。这个对象可以挂载函数&#xff0c;对象实例化不会多次创建原型上函数&#xff0c;节约内存。我们可以把那些不变的方法&#xff0c;直接定义在p…

NPM 为自己创建的组织付费

目录 1、升级为付费组织计划 2、查看、下载和通过电子邮件发送组织的收据 2.1 查看数据 3、更新组织账单设置 3.1 更新信用卡信息 3.2 更新帐单收据电子邮件和额外收据信息 4、降级为免费组织 1、升级为付费组织计划 作为组织所有者&#xff0c;您可以将免费组织计划升级…

智能监控系统的守护者:人工智能行为识别技术的崛起与发展

人工智能助力监控系统&#xff1a;行为识别在安全监控中的应用与挑战 摘要&#xff1a; 随着人工智能技术的快速发展&#xff0c;行为识别在监控系统中的应用逐渐成为安全监控领域的重要工具。本文将详细探讨人工智能行为识别技术在监控系统中的应用&#xff0c;以及在实际应用…

Tween.js动画函数使用demo

案例&#xff1a; 小球的运动数字的自增 demo <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title&g…

AI 绘画Stable Diffusion 研究(十三)SD数字人制作工具SadTlaker使用教程

免责声明: 本案例所用安装包免费提供&#xff0c;无任何盈利目的。 大家好&#xff0c;我是风雨无阻。 想必大家经常看到&#xff0c;无论是在产品营销还是品牌推广时&#xff0c;很多人经常以数字人的方式来为自己创造财富。而市面上的数字人收费都比较昂贵&#xff0c;少则几…

spring事件监听event(默认的mq)

文章目录 前言一、event是什么&#xff1f;二、使用步骤1.事件2.事件监听3.发布事件 三、测试结果总结 前言 项目中的业务难免是相互关联的,但是代码中我们应该尽量做到低耦合,常见的做法就是引入mq来作为松耦合的一种手段; 其实最常见的解耦和就是接口了,MVC直接通过接口(约定…

反弹shell bash -i命令

目录 0x01 什么是反弹shell&#xff1f;   0x02 命令拆分详解   0x03 文件描述符   0x04 shell 输入/输出重定向   0x05 输入输出结合获得shell 什么是反弹shell&#xff1f; 假设有两台主机 A(控制端) B(被控端) 正向shell&#xff0c;就是ssh、Telnet的连接&#xf…

YOLOv5源码中的参数超详细解析(4)— 推理部分detect.py

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。YOLOv5是一种先进的目标检测算法&#xff0c;它可以实现快速和准确的目标检测。detect.py是YOLOv5项目目录结构中的一个重要的脚本文件&#xff0c;它用于执行目标检测任务&#xff0c;可以通过命令行参数指定要检测的图像…

【三维重建】Factor Fields: 超越神经场的统一框架

论文&#xff1a;Factor Fields: A Unified Framework for Neural Fields and Beyond 文章&#xff1a;https://arxiv.org/abs/2302.01226 项目&#xff1a;https://apchenstu.github.io/FactorFields/ 文章目录 摘要一、前言二、Factor Fields2.1.字典场&#xff08;DiF&#…

二级MySQL(三)——数据库的增删改查

创建一个新的数据库&#xff1a; CREATE DATABASE db_school DEFAULT CHARACTER SET GB2312 DEFAULT COLLATE GB2312_chinese_ci&#xff1b; 查找创建的数据库&#xff08;全部&#xff09;&#xff1a; 其他的是SQL自带的数据库 查阅我们自己创建的字符集以及对应的字符集…