5.5.webrtc的线程管理

这篇具有很好参考价值的文章主要介绍了5.5.webrtc的线程管理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天呢,我们来介绍一下线程的管理与绑定,首先我们来看一下web rtc中的线程管理类,也就是thread manager。对于这个类来说呢,其实实现非常简单,对吧?

包括了几个重要的成员,第一个成员呢就是instance成员,通过这个名字,我们也可以知道它属于单例模式。那通过instance呢,我们就可以拿到thread manager这个对象了,

对吧?这是第一个thread manager的第二个成员呢,是message。通过它的类型啊,我们可以知道这个呢,就是存放所有y8 rtc中的线程对象的,那它是一个victor,也就是一个数组。在这个数组中呢,可以存放three的类型的指针。

再接下来呢,是一个临界区。security section对于message里边的所有线程的操作读啊取啊都要对它先进行加锁,那只有获得锁之后呢才能操作这个队列。

5.5.webrtc的线程管理,webrtc,webrtc

再接下来这个k呢也十分关键,它属于three的local storage的内容,关于这部分知识呢,一会儿我会向你做详细介绍。那我们现在再来看three的manager这个类,那它有一个最主要的成员就是message,除此之外呢,还有一个k那这个k呢,现在大家还不知道什么意思,那一会儿呢,我就会讲到。

那我们来看看thread manager,它是如何管理线程的?实际上,对于thread manager来说呢,它有两个队列,第一个队列就是我们刚才介绍的message q。在它里边儿呢,可以存放很多的线程对象,那除了这个message之外呢,

还有一个k。那这个k是什么作用呢?就是three的local storage,也就是专门用于本地线程存储的。那你可以把它想象成是一个map表,对吧?它的k呢?就是一个线程ID值呢?
5.5.webrtc的线程管理,webrtc,webrtc

可以是任意对形的对象。那对于外边rtc来说呢,它里边存放的就是three的指针,这个map与three的manager中的message q每一项呢都是一一对应的,也就是说第一项的three的对应这里的。tid thread第二项呢?对应第二项

就是一一对应这张图对于我们理解thread manager来说是非常关键的。如果我们对这个结构不清楚的话,你就很难理解thread manager它里边的逻辑为什么要那么实现?只有我们把这个图搞清楚了之后,我们才能理解它里边的逻辑,那除此之外呢,

对于message crease中的。每个three的对象都是由构造three的时创建的,而对于k中的每一项呢,是在线程执行的时候。通过set current three的来设置的,那现在呢我们只需要记住这两点就OK了,

第一点呢就是我们message query中的每一个three的。它是在线程的构造函数中创建的,属于three的local story中的内容呢?

是在当前线程执行的时候。调用来设置的那下面呢?我们来具体介绍一下three的local storage。那关于three的local storage呢,应该是在C加加幺幺引入的对,所以它引入的时间呢,并不是很长,下面呢,我们来看看three的local storage,它的一些基本用法。
5.5.webrtc的线程管理,webrtc,webrtc

第一个呢,就是tls I lock,那tls呢,就是thread local storage的缩写。I lock就是分配的意思,那对于这个函数来说呢?它返回的是一个全局的索引值。当然,在底层的内存中呢,实际就分配一个map,有k有value okay,那这里返回的这个索引值是什么意思呢?实际上,对于我们系统中的每一个进程来说,它都有一个唯一的索引值,

也就说每一个进程一块空间。在这个空间中呢,它里边是一个map表,而为了索引到这个空间,它有一个索引值。比如我一号进程,它的索引值可能是一二号进程,它的索引值可能是二,以此类推就是大概这个意思。总之呢,它是通过索引值来找到这块内存空间的,这个呢,就是tls I这个函数的作用。好,那有了这个空间之后呢,

我们就可以用tls set value来向I lock分配的这个空间里边插入值。插入的内容呢,就是tid和date,当然我们存放的时候对于tls set value来说,你应该输入两个参数。第一个参数呢就是tls I lock返回的这个索引值,那第二个值呢就是我们要存入的数据。

而在内存中呢,它真正存放的是tid和data,那它是怎么找到的呢?实际上就是根据你传入的这个索引值,也就是tls I lock。产生的这个索引值找到内存中的这个map之后呢,再获取你当前线程的线程ID。之后把线程ID当做k你存入的data为value,
5.5.webrtc的线程管理,webrtc,webrtc

这样呢,将这个k value对儿插入到map中就是这样一个简单的过程。那它提供的第三个就是get value,也就是说从内存中通过当前线程ID获取到我们之前存储的值。它主要呢就是这三个函数对于web rtc,它在使用的时候呢,也是一直用的这三个函数,

那接下来呢,我们来看一个实例,就是来查看一下peer connection c。demo程序中的主线程与three的线程是如何绑定的?我们切换到Windows系统下。OK好,我们还是打开peer connection clan的这个项目之后呢,找到men点CC这个文件,
5.5.webrtc的线程管理,webrtc,webrtc

那在这里边呢,我们找到。文本中的第81行也就是这一句。通过这行语句呢,实际就实现了。主线程与前面我们创建的win四二three的对象的绑定,现在我们应该清楚上节课我们介绍的win四二three的对象。实际它就是一个线程对象,并不是一个真正的线程,而对于我们peer connection clan端来说呢,它现在的主线程已经启动起来了。那如何将主线程与我们前面创建的对象绑定起来?秘密就在于set current three的这个函数。那下面呢,我们就跳到这个函数中看一下它是如何实现的。
5.5.webrtc的线程管理,webrtc,webrtc

好,那在three的manager的set current three的方法中呢?实际就调用了set current three的internal。这个方法对吧?我们继续跳进去。那在这个函数中呢,我们看到只有一条语句,就是tls set value。这个k呢,就是我们刚才介绍的这个索引值,它是通过tls I lock分配的。
5.5.webrtc的线程管理,webrtc,webrtc
对于sweet manager来说,这个k是什么时候产生的呢?实际就是在它的构造函数,我们看一下281行。

它的构造函数中呢,调用了tls I lock方法,最终获得我们本地线程的存储空间。并将索引值呢复制给k。
5.5.webrtc的线程管理,webrtc,webrtc

那么,在调用set current three的internal方法的时候呢,就可以直接将我们之前创建的three的对象指针。当做参数设置到k所指定的内存空间中,那这样呢,我们就看到了两个方法的使用,那第一个呢是线程本地空间的分配。第二个呢,是向线程本地空间存储,我们自己的数据。那由于我们现在是在主线程内执行的,

所以呢,对于存储到内存中的值一定是我们当前线程的线程ID与我们要存入的线程对象的指针。形成了一个ky 6对儿,存放到了内存空间中,对吧?好,那通过这种方式呢,就实现了当前线程与three的对象之间的绑定。
5.5.webrtc的线程管理,webrtc,webrtc

其实还是非常好理解的,对吧OK那了解了当前线程与three的对象的绑定,那下面呢,我们再来看看three的对象是什么时候插入到three的many中中的。那这个时候呢,我们就要看一下win 3 r t hree的这个类的实现了。那我们跳到这个类中win三二three的类是继承自three的类的好,
5.5.webrtc的线程管理,webrtc,webrtc

我们继续跳到three的类的实现。那在这里边儿呢,比较关键的一点是它的构造函数对吧?我们要弄清three的对象,创建好之后是什么时候插入到three的manager中的?必须要看一下它的构造函数的视线。我们跳到它的构造函数中,对于three的对象的构造函数呢?上节课已经向你介绍过它有多种空载。包括了socket server指针,智能指针,智能指针加do I it,对吧?那通过这个代码,我们可以发现啊,

实际所有的构造函数,最终呢,都会调用。这个构造函数我们来看一下,在这个构造函数中,它做了哪些事情?
5.5.webrtc的线程管理,webrtc,webrtc
其中比较关键的一点就是调了。我们进入到doin it那,在这个函数中做了什么事儿呢?我们看一下372行,那在这里呢?执行了一条语句,就是将。这次指针插入到three的manager中,我们可以继续往下跳,
5.5.webrtc的线程管理,webrtc,webrtc

找到add,再找到add internal。在add internal函数中的129行,我们就可以看到它。
5.5.webrtc的线程管理,webrtc,webrtc
最终呢,将message query加入到了。message query中,而message query就是一个three的对象指针对吧?这样呢,我们就将整个的逻辑搞清楚了,再切回到WI MI函数的80行和81行。通过这两条语句呢,我们就可以知道在80行是创建了一个win三二three的,在创建好之后就被插入到three的manager中了。对吧,

之后呢,他又调用了set current three的这个方法,将当前线程与我们刚才创建的win cr three的对象。进行了绑定,那这样呢,就使得当前线程与three的对象产生了一对一的关系。(队列和对象绑定,对象和线程绑定,队列和线程绑定)

那之后呢,我们就可以利用win 12 three的对象中的队列进行消息处理了。那以上呢,就是web rtc three的对象与线程进行绑定的一个过程,那经过刚才我们代码的分析呢,我们现在已经知道web rtc。线程与线程对象之间是如何进行绑定的?是如何进行管理的了?对吧?

其中的核心点呢?就是这张图。如果你对这张图非常熟悉的话,那就知道它的逻辑其实非常的简单,如果这张图你不了解的话,不知道还有three的local storage。这个map表儿的话,你就很难理解y8 rtc线程是如何管理的,那有些看了我书的同学呢,就对这一块儿逻辑不太清楚,像我提出了很多问题。根本的原因呢,就在于我书中没有对这块儿知识做详细介绍,所以他们无法理解,那现在呢,
5.5.webrtc的线程管理,webrtc,webrtc

大家了解了这块儿知识之后呢,应该对外边儿tc的street manager。它是如何管理线程的?线程与对象之间是如何绑定的?就非常清楚了,那后边呢?我们再看后续的代码的时候。就非常容易了好,那今天呢?我们的课就到这里,有任何的问题呢,你可以到讨论区或者是群里去给我留言,我在那里呢,给你做相应的解答好,谢谢。

回播放处文章来源地址https://www.toymoban.com/news/detail-660957.html

到了这里,关于5.5.webrtc的线程管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 多媒体库SDL以及实时音视频库WebRTC中的多线程问题实战详解

    目录 1、概述 2、开源跨平台多媒体库SDL介绍 3、开源音视频实时通信库WebRTC介绍

    2024年02月08日
    浏览(40)
  • Java 中的线程是什么,如何创建和管理线程-上(十一)

    Java 中的线程是指程序中可以独立执行的最小单位。在 Java 中,创建线程通常有两种方式:继承 Thread 类和实现 Runnable 接口。线程的管理包括控制线程状态、线程优先级、线程同步等。 一、Java 中的线程 线程是程序中能够独立执行的最小单位,它具有自己的执行路径、调用栈

    2024年02月03日
    浏览(28)
  • C++进程、线程、内存管理

    目录 进程和线程区别 进程和线程切换的区别 系统调用流程 系统调用是否会引起线程切换 为什么需要使用虚拟内存 本质区别: 进程是资源分配的基本单元。 线程是操作系统调度的基本单元。 地址空间: 进程具有独立的虚拟地址空间。 线程共享进程的虚拟地址空间。 内存

    2024年02月10日
    浏览(30)
  • (学习笔记-进程管理)线程

    在早期的操作系统都是以进程为独立运行的基本单位,直到后面,计算机科学家们提出了更小的能独立运行的基本单位: 线程   举个例子,假设要编写一个视频播放软件,那么软件功能的核心模块有三个: 从视频文件中读取数据 对读取的数据进行解压缩 把压缩后的视频数

    2024年02月14日
    浏览(23)
  • unity的C#学习——多线程编程(线程的生命周期、创建与管理)与线程相关类

    多线程编程是 C# 一个比较难且涵盖面比较广的知识点,本文整理仓促而且属于笔记向博客,有些地方必然还存在不严谨和错误,本人会在日后的使用过程中不断完善。如果发现问题或有改进意见可以在评论区提出,我会及时修改。 线程是程序的执行流程,也被称为 轻量级进

    2024年02月12日
    浏览(29)
  • (学习笔记-进程管理)多线程冲突如何解决

    对于共享资源,如果没有上锁,在多线程的环境里,很有可能发生翻车。 在单核 CPU 系统里,为了实现多个程序同时运行的假象,操作系统通常以时间片调度的方式,让每个进程每次执行一个时间片,时间片用完了,就切换下一个进程运行,由于这个时间片的时间很短,于是

    2024年02月13日
    浏览(33)
  • android 线程池的管理工具类

    封装了各种类型的线程池,方便直接使用 看下有哪些类型: 默认线程池,搜索模块专用线程池,网络请求专用线程池,U盘更新,同步SDK读写操作线程池,日志打印使用线程池 DEFALUT,SEARCH,NET_WORK,UDISK_DOWNLOAD,SDK_IO,LOG_PRINT 看下有哪些优先级级别 UI_TOP, UI_NORMAL, UI_LOW, DEFA

    2024年01月24日
    浏览(34)
  • OS1_进程与线程的管理

    序言 1.OS以进程、线程的方式在CPU中执行静态保存在外存(内存)中的程序,进程的构成与状态转化,特别是进程的切换; 2.当有多个进程处于就绪态,有哪些常见的挑选以执行方式; 3.并发执行(乱序发射)的进程,共享内存等资源,很可能修改其他程序的变量,需作同步处理来

    2024年02月16日
    浏览(22)
  • Python小论文-图书管理系统+Python+tkinter+sqlite3+PersistentDB线程池管理

    该系统主要通过tkinter库实现图书管理系统,包含对SQLite3数据库的增删改查的知识点。主要功能有:登录、注册、图书查询、借书、还书、图书录入、图书删除、图书统计、管理员新增、数据库查询等模块。 Python小论文-图书管理系统+Python+tkinter+sqlite3+PersistentDB资源池 Python桌

    2024年02月02日
    浏览(24)
  • 【参天引擎】华为参天引擎内核架构源码架构,多线程服务,数据节点管理,多节点间元数据管理

    ​ 专栏内容 : 参天引擎内核架构 本专栏一起来聊聊参天引擎内核架构,以及如何实现多机的数据库节点的多读多写,与传统主备,MPP的区别,技术难点的分析,数据元数据同步,多主节点的情况下对故障容灾的支持。 手写数据库toadb 本专栏主要介绍如何从零开发,开发的

    2024年02月03日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包