webrtc rtc_base Copy_on_write_Buffe类功能剖析
copy_on_write_buffer主要实现的功能简单概括就是: 读时共享,写时复制.
首先我们来看下,对应类的继承层次结构:
FinalRefCountedObject:
只提供引用计数功能
BufferT:
官网解释的十分清楚了:
// Basic buffer class, can be grown and shrunk dynamically.
// Unlike std::string/vector, does not initialize data when increasing size.
// If “ZeroOnFree” is true, any memory is explicitly cleared before releasing.
// The type alias “ZeroOnFreeBuffer” below should be used instead of setting
// “ZeroOnFree” in the template manually to “true”.
CopyOnWriteBuffer:
本质上只是利用Buffer的能力,来实现对Buffer业务能力的扩展,比如:引入了引用计数。
这里一旦引入了引用计数,那么便意味着,Buffer的生命周期归计数器来管理,它们之间的关系就是属于关联关系中的聚合关系了.
那么为何要引入引用计数呢?
我们来考虑一个服务器很频繁的运用场景-数据分发。
如果不采用引用计数,很多情况下,我么需要对数据产生多个副本,就会频繁的在内存中new/memcpy/delete,如果拥有了引用计数的功能,那么我们便可以在发送了最后一个数据后,安全的对数据进行回收 ,这个也就是我们所说的读时共享功能.
实现方式:
// Share the data with an existing buffer.CopyOnWriteBuffer(const CopyOnWriteBuffer& buf);
写时复制懒得说了,本质就是对Buffer的函数调用实现。
webrtc rtc_base Copy_on_write_Buffe类功能剖析相关推荐
- boost::units模块实现确保最小的 + - * / 单元类功能齐全的测试程序
boost::units模块实现确保最小的 + - * / 单元类功能齐全的测试程序 实现功能 C++实现代码 实现功能 boost::units模块实现确保最小的 + - * / 单元类功能齐全的测 ...
- JDK 6中新增的Java Console类功能概览
转载自 JDK 6中新增的Java Console类功能概览 JDK 6中提供了java.io.Console类专用来访问基于字符的控制台设备.如果你的Java程序要与Windows下的cmd或者L ...
- 深入struts2(二) ---stuts2长处和主要包、类功能
1.1 Struts2 上节已讲.struts2在webwork基础发展起来的mvc框架.MVC框架相信一般码农都比較了解,这里不再重说. 在这里只对于一下struts1,struts2做了哪 ...
- 蓝鲸智云功能剖析介绍
蓝鲸功能剖析&介绍 概要: 简单看了一下蓝鲸平台的内容. 整个架构都是依赖了一个长连接的agent (tcp)能够通过这个agent来实现很多功能.如: push 脚本给collector p ...
- 关于Vue开发即时聊天类功能的经验分享(其实并不复杂)
当下即时通讯已经成为大多数产品的主要功能,最近在工作过程中需要初步开发一个具有基础通讯功能的客服功能.根据此开发功能的过程,总结了一些开发经验与方法(使用的SDK不同,实现方法也会有比较大的差异).之 ...
- MathNet.Numerics主要类功能简述
MathNet.Numerics主要类功能简述 MathNet.Numerics是一个.NET的开源数学库,包含了.NET平台上的面向对象数字计算的基础类.类似 NMath ,但 NMath 是收费的 ...
- php同时抢购 代码,php如何处理抢购类功能的高并发请求
在高并发请求下容易参数两个问题 1.数据出错,导致产品超卖. 2.频繁操作数据库,导致性能下降. 本文主要和大家详细介绍了php处理抢购类功能的高并发请求,具有一定的参考价值,感兴趣的小伙伴们可以参考 ...
- 微信网页开发 分享功能剖析
微信网页开发 分享功能剖析 步骤一:绑定域名 先登录微信公众平台进入"公众号设置"的"功能设置"里填写"JS接口安全域名". 步骤二:引入J ...
- C#中关于增强类功能的几种方式
C#中关于增强类功能的几种方式 本文主要讲解如何利用C#语言自身的特性来对一个类的功能进行丰富与增强,便于拓展现有项目的一些功能. 拓展方法 扩展方法被定义为静态方法,通过实例方法语法进行调用.方法的 ...
最新文章
- Python记录-基础语法入门
- 编写python程序的步骤_编写python程序和运行.py文件的方法步骤
- Git 分布式版本管理
- 怎么查看jre版本_javac和java版本不一致问题
- ping与telnet的区别
- PHP的uniqid
- 华为防火墙ftp_FTP被动模式访问问题
- oracle查看角色内容,oracle创建,查看用户和角色,用户角色赋权
- c语言通过定义变量实现对,C语言中定义变量“#X”,X##, ##X 和“##X##”用意
- python钓鱼评论爬取
- oracle扩充字段长度的SQL语句,sql语句修改字段长度
- IDEA 个人私藏插件
- Java反编译工具-luyten
- linux 版本iomete,Linux系统下Iometer的使用方法
- 微信小程序内容组件图标 icon
- SQL中分组,排序,分组排序
- 快递市场定价 到底有何影响
- python 步数_用python如何修改微信和支付宝每天走路的步数
- 正态分布概率密度函数的推导
- 前端学习笔记:CSS学习之选择器篇