webrtc Thread 和 TaskQueue 的 應用和思考

webrtc Thread 和 TaskQueue 的 應用和思考

Thread

#include "rtc_base/thread.h"void FunctionToRunOnThread() {// Your threaded logic here.printf("Function running on the thread!\n");
}int main() {rtc::Thread* thread = rtc::Thread::Create().release();thread->Start();// Send a task to the thread.thread->Invoke<void>(RTC_FROM_HERE, &FunctionToRunOnThread);// Cleanup.thread->Stop();delete thread;return 0;
}

為什么要在Create 后調用release:rtc::Thread* thread = rtc::Thread::Create().release();

這種寫法的目的是獲取std::unique_ptr管理的原始指針,并確保std::unique_ptr不會在作用域結束后自動刪除它。

當你調用rtc::Thread::Create()時,這個函數返回一個std::unique_ptr<rtc::Thread>對象。這個std::unique_ptr對象擁有一個rtc::Thread的實例,當這個std::unique_ptr對象超出作用域或被銷毀時,它會自動刪除這個rtc::Thread實例。

當你調用release()方法時,你實際上是在告訴std::unique_ptr放棄對rtc::Thread的所有權。這意味著std::unique_ptr不再擁有這個對象,并且在std::unique_ptr銷毀時不會刪除它。這就允許你手動管理這個對象的生命周期。

** 所以 release 是 std::unique_ptr 的方法。**

TaskQueue

#include "rtc_base/task_queue.h"void FunctionToRunOnQueue() {// Your task logic here.printf("Function running on the task queue!\n");
}int main() {rtc::TaskQueue task_queue("MyTaskQueue");// Post a task to the queue.task_queue.PostTask(RTC_FROM_HERE, &FunctionToRunOnQueue);// The task queue will automatically handle the task. // For the sake of this example, just wait a bit to let the task run.rtc::Thread::Current()->SleepMs(100);return 0;
}

RTC_FROM_HERE 是 WebRTC 代碼庫中用于標識代碼位置的宏。它通常與日志、斷言和任務調度等功能一起使用,以提供源代碼中的文件名和行號信息。

例如,當你在 WebRTC 中遇到一個斷言失敗或者想要追蹤一個特定的日志事件,RTC_FROM_HERE 會提供一個表示代碼位置的rtc::Location對象,這樣你可以知道是哪個文件的哪一行產生了這個事件或錯誤。

它的定義大致如下:

#define RTC_FROM_HERE rtc::Location(__FILE__, __LINE__)

webrtc::Threadwebrtc::TaskQueue 為什么不單獨編譯成so 給webrtc使用 而將 源碼集成到webrtc 中,他們不是解耦的嗎?

webrtc::Threadwebrtc::TaskQueue直接集成到 WebRTC 源碼中,而不是編譯為單獨的 .so (shared object) 文件或庫,是基于幾個原因的決策:

  1. 緊密集成: 盡管webrtc::Threadwebrtc::TaskQueue作為組件是相對獨立的,但它們與 WebRTC 的其他部分有著緊密的交互和依賴關系。將它們與核心代碼緊密集成可以確保更好的性能和優化。

  2. 編譯和鏈接優化: 將所有組件編譯到一個單一的二進制文件中允許編譯器進行更多的跨模塊優化。這可能會導致更快的代碼和更小的二進制大小。

  3. 簡化部署和分發: 不需要管理、分發和鏈接多個.so文件可以簡化應用程序的部署和分發。此外,這可以確保版本兼容性,因為所有組件都是從同一源碼樹構建的。

  4. 避免 ABI (Application Binary Interface) 的問題: ABI 是二進制代碼如何在運行時調用和使用的一個規范。不同的編譯器、編譯器版本或編譯器標志可能會導致不同的 ABI。將所有東西編譯到一個庫中可以避免潛在的 ABI 兼容性問題。

  5. 維護和開發效率: 在單一的代碼庫中工作可以簡化開發流程,特別是當需要跨多個組件進行更改時。

  6. 安全性: 將所有組件緊密集成可以確保一致的安全實踐和策略。此外,避免加載外部.so文件還可以減少潛在的安全風險。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40253.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40253.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40253.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WebService—XFire配置筆記

在學習之前,一直以為WebService就是一個工具,在兩個服務器之間建立一個通信,幫我們把需要傳輸的數據組織成規范的XML數據并發送到目的地,實際情況也確實是這樣的,不過更高級一點的是,XFire不但可以幫我們生成XML發送,而且可以在接收了xml之后還可以直接返回對象給我們用…

iptabels路由轉發

要配置iptables進行路由轉發&#xff0c;需要執行以下步驟&#xff1a; 確保系統已經開啟了IP轉發功能。可以通過執行以下命令來檢查&#xff1a; sysctl net.ipv4.ip_forward如果返回的值為1&#xff0c;表示已經開啟了IP轉發功能。如果返回的值為0&#xff0c;可以通過執行…

神經網絡基礎-神經網絡補充概念-29-為什么使用深層表示

概念 深層表示&#xff08;Deep Representation&#xff09;是指在深度神經網絡的多個隱藏層中逐層提取和學習數據的特征表示。 使用深層表示的原因 高維特征提取&#xff1a;深層神經網絡可以從原始數據中自動學習高維抽象特征。每個隱藏層都對數據進行一些變換&#xff0c…

“深入探索JVM內部機制:解密Java虛擬機的奧秘“

標題&#xff1a;深入探索JVM內部機制&#xff1a;解密Java虛擬機的奧秘 摘要&#xff1a;本文將深入探索Java虛擬機&#xff08;JVM&#xff09;的內部機制&#xff0c;介紹JVM的基本原理、運行時數據區域以及垃圾回收機制&#xff0c;并通過示例代碼解釋這些概念。 正文&am…

PG-DBA培訓14:PostgreSQL數據庫升級與遷移

一、風哥PG-DBA培訓14&#xff1a;PostgreSQL數據庫升級與遷移 課程目標&#xff1a; 本課程由風哥發布的基于PostgreSQL數據庫的系列課程&#xff0c;本課程屬于PostgreSQL備份恢復與遷移升級階段之PostgreSQL數據庫升級與遷移&#xff0c;學完本課程可以PostgreSQL數據庫升…

炒股票怎么加杠桿_融資融券賬戶怎么開通

炒股票作為一種投資方式&#xff0c;可以帶來不錯的回報。然而&#xff0c;對于那些希望以較小的資金獲得更高收益的投資者來說&#xff0c;加杠桿炒股票是一個值得考慮的選擇。本文將為您介紹加杠桿炒股票的意義&#xff0c;以及如何開通融資融券賬戶。 加杠桿炒股票的意義&a…

Centos8安裝docker并配置Kali Linux圖形化界面

鑒于目前網上沒有完整的好用的docker安裝kali桌面連接的教程&#xff0c;所以我想做一個。 準備工作 麻了&#xff0c;這服務器供應商提供的鏡像是真的純凈&#xff0c;純凈到啥都沒有。 問題一&#xff1a;Centos8源有問題 Error: Failed to download metadata for repo ap…

vue入門(增查改!)

<template><div><!-- 搜索欄 --><el-card id"search"><el-row><el-col :span"20"><el-input v-model"searchModel.name" placeholder"根據名字查詢"></el-input><el-input v-mode…

STM32 FLASH 讀寫數據

1. 《STM32 中文參考手冊》&#xff0c;需要查看芯片數據手冊&#xff0c;代碼起始地址一般都是0x8000 0000&#xff0c;這是存放整個項目代碼的起始地址 2. 編譯信息查看代碼大小&#xff0c;修改代碼后第一次編譯后會有這個提示信息 2.1 修改代碼后編譯&#xff0c;會有提示…

python3.73安裝教程,python3.10安裝教程

大家好&#xff0c;小編來為大家解答以下問題&#xff0c;python3.73安裝教程&#xff0c;python3.10安裝教程&#xff0c;現在讓我們一起來看看吧&#xff01; Python目前已支持所有主流操作系統&#xff0c;在Linux,Unix,Mac系統上自帶Python環境&#xff0c;一般默認裝的是P…

你敢信?代碼小白30min就能搭建一套酷炫級的駕駛艙!

大量研究結果表明&#xff0c;人類通過圖像獲取信息的速度比通過閱讀文字獲取信息的速度要快很多。 近幾年&#xff0c;數據可視化在企業中越發“流行”&#xff0c;將數字以可視化的形式展示&#xff0c;不僅清晰明了地展現企業真正的實力&#xff0c;也能讓管理者快速了解細節…

PG-DBA培訓12:PostgreSQL物理備份與恢復實戰

一、風哥PG-DBA培訓12&#xff1a;PostgreSQL物理備份與恢復實戰 課程目標&#xff1a; 本課程由風哥發布的基于PostgreSQL數據庫的系列課程&#xff0c;本課程屬于PostgreSQL備份恢復與遷移升級階段之PostgreSQL物理備份與恢復實戰&#xff0c;學完本課程可以掌握&#xff1…

Linux6.39 Kubernetes Pod控制器

文章目錄 計算機系統5G云計算第三章 LINUX Kubernetes Pod控制器一、Pod控制器及其功用二.pod控制器有多種類型1.ReplicaSet2.Deployment3.DaemonSet4.StatefulSet5.Cronjob 三、Pod與控制器之間的關系1.Deployment2.SatefulSet1&#xff09;為什么要有headless2&#xff09;為…

gulimall-緩存-緩存使用

文章目錄 前言一、本地緩存與分布式緩存1.1 使用緩存1.2 本地緩存1.3 本地模式在分布式下的問題1.4 分布式緩存 二、整合redis測試2.1 引入依賴2.2 配置信息2.3 測試 三、改造三級分類業務3.1 代碼改造 四、高并發下緩存失效問題4.1 緩存穿透4.2 緩存雪崩4.3 緩存擊穿 五、分布…

C++學習第十二天----指針

1.自動存儲&#xff0c;靜態存儲和動態存儲 c有3種管理數據內存的方式&#xff1a;自動存儲&#xff0c;靜態存儲和動態存儲&#xff08;有時也叫自由存儲空間或堆&#xff09;&#xff1b;C其實還有第4種類型----線程存儲&#xff1b; 第一&#xff0c;自動存儲&#xff0c;在…

Talk | ICCV‘23 HumanMAC:簡潔易拓展的人體動作預測新框架

? 本期為TechBeat人工智能社區第522期線上Talk&#xff01; 北京時間8月16日(周三)20:00&#xff0c;清華大學博士生—陳凌灝的Talk已準時在TechBeat人工智能社區開播&#xff01; 他與大家分享的主題是: “HumanMAC-簡潔易拓展的人體動作預測新框架”&#xff0c;介紹了人體動…

linux 學習————LNMP之分布式部署

目錄 一、概述 二、LNMP環境部署 三、配置nginx 四、 配置php使nginx能夠解析.php 五、配置mysql 六、配置discuz進行登錄論壇訪問測試 一、概述 LNMP代表 Linux、Nginx、MySQL、PHP&#xff0c;是一種常用的服務器架構。它由以下組件組成&#xff1a; Linux&#xff1a;作…

【js】js中apply()、bind()、call()用法

這三個方法的作用基本上相同&#xff0c;用法上有一些不同&#xff0c;下面先對比一下它們的用法&#xff1a; apply&#xff1a;調用一個具有給定 this 值的函數&#xff0c;以及以一個數組&#xff08;或一個類數組對象&#xff09;的形式提供的參數。 語法&#xff1a; ap…

Metasploitable2靶機漏洞復現

一、信息收集 nmap掃描靶機信息 二、弱口令 1.系統弱口令 在Kali Linux中使用telnet遠程連接靶機 輸入賬號密碼msfadmin即可登錄 2.MySQL弱口令 使用mysql -h 靶機IP地址即可連接 3.PostgreSQL弱密碼登錄 輸入psql -h 192.168.110.134 -U postgres 密碼為postgres 輸入\…

每天一個電商API分享:淘寶商品銷量接口,獲取淘寶商品銷售數據(淘寶商品精準銷量、總銷量、月銷量)

開發背景 商品銷量是商家決策的重要參考指標之一。通過淘寶商品銷量接口&#xff0c;商家可以獲取到實時的銷量信息&#xff0c;從而更好地進行庫存管理、供應鏈計劃和市場推廣等決策。 淘寶商品銷量接口可以提供豐富的銷售數據&#xff0c;包括銷售數量、銷售額、銷售渠道等…