ringbuff进阶 evbuffer
Libevent之evbuffer详解_有时需要偏执狂的博客-CSDN博客
日常小知识点之用户层网络缓冲区(固定内存,ringbuffer,chainbuffer)_yun6853992的博客-CSDN博客
缓冲区由evbuffer和evbuffer_chain组成,其中evbuffer_chain
是真正存储数据的一块内存,通过链表将一个一个的evbuffer_chain
连接在一起,组成内存池。而通过evbuffer
结构体就可以管理这个内存池链表了。所以结果如下图: 多级缓冲
Libevent将缓冲数据都存放到buffer中。通过一个个的evbuffer_chain连成的链表可以存放很多的缓冲数据。
Libevent有一个很独特的地方,就是那个evbuffer_chain结构体。
1、该结构体有misalign成员。该成员表示错开不用的buffer空间。也就是说buffer中真正的数据是从buffer + misalign开始。
2、evbuffer_chain结构体buffer是一个指针,按道理来说,应该单独调用malloc分配一个堆内存并让buffer指向之。但实际上buffer指向的内存和evbuffer_chain结构体本身的存储内存是一起分配的。
buffer内存区域(蓝色区域)连在next的后面也是基于这一点的。在代码的while循环中也可以看到申请的空间大小是512的倍数,也就是说evbuffer_chain申请的空间大小是512、1024、2048、4096等等。
函数evbuffer_chain_new
,该函数是用来创建一个evbuffer_chain
。现在贴出另外一个函数evbuffer_new
,它是用来创建一个evbuffer
。
ringbuff进阶 evbuffer相关推荐
- 正式压力测试:locust进阶,超简单搭建生产级locust集群
locust进阶,搭建生产级locust集群 本教程基于k8s集群搭建,使用helm作为包管理工具 通过helm安装locust
- 伍六七带你学算法 进阶篇-生命游戏
有趣的算法题–生命游戏 难度-中等 根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机. 想要体验生命游戏的小伙伴可以到这里-->生命游戏 进入 ...
- NLP进阶之(七)膨胀卷积神经网络
NLP进阶之(七)膨胀卷积神经网络 1. Dilated Convolutions 膨胀卷积神经网络 1.2 动态理解 1.2.2 转置卷积动画 1.2.3 理解 2. Dilated Convolu ...
- js进阶 13-5 jquery队列动画如何实现
js进阶 13-5 jquery队列动画如何实现 一.总结 一句话总结:同一个jquery对象,直接写多个animate()就好. 1.什么是队列动画? 比如说先左再下,而不是左下一起走 2.怎么实现 ...
- 一个java高级工程师的进阶之路【转】
一个java高级工程师的进阶之路[转] 宏观方面 一. JAVA.要想成为JAVA(高级)工程师肯定要学习JAVA.一般的程序员或许只需知道一些JAVA的语法结构就可以应付了.但要成为JAVA(高级) ...
- SQL Server Extended Events 进阶 3:使用Extended Events UI
开始采用Extended Events 最大的阻碍之一是需要使用Xquery和XML知识用来分析数据.创建和运行会话可以用T-SQL完成,但是无论使用什么目标,数据都会被转换为XML.这个限制在SQL ...
- 《OpenCV3编程入门》学习笔记5 Core组件进阶(六)输入输出XML和YAML文件
第5章 Core组件进阶 5.6 输入输出XML和YAML文件 5.6.1 XML和YAML文件 XML和YAML是使用非常广泛的文件格式,可以利用XML或者YAML式的文件存储和还原各种数据结构,还 ...
- 《OpenCV3编程入门》学习笔记5 Core组件进阶(五)离散傅里叶变换(DFT)
第5章 Core组件进阶 5.5 离散傅里叶变换(Discrete Fourier Transform,DFT) 5.5.1 离散傅里叶变换原理 1.对一张图像使用傅里叶变换就是把它分解成正弦和余弦, ...
- 《OpenCV3编程入门》学习笔记5 Core组件进阶(四)图像对比度、亮度值调整
第5章 Core组件进阶 5.4 图像对比度.亮度值调整 5.4.1 理论依据 1.算子:一般图像处理算子都是一个函数,接受一个或多个输入图像,并产生输出图像 2.算子一般形式: 3.点操作(poin ...
最新文章
- 面试官问:Integer 如何实现节约内存和提升性能的?
- 如何重新划分swap分区
- 依图科技终止上市审核:冲击科创板「AI第一股」失败
- Spring+Quartz实现定时任务的配置方法
- 为在innodb中什么主键用auto_increment效率会提高
- mysql 中文 length_mysql length()中文长度一些问题整理
- a java_java程序弹出a java exception has occurred
- boost::geometry::util::calculation_type用法的测试程序
- (2.15)备份与还原--使用作业备份、清理过期备份、清理历史记录、事务日志是否备份过...
- __attribute__((always_inline))
- Python基础学习笔记之(一)
- Java线程栈的获取和分析
- [渝粤教育] 云南大学 大学生创新创业教育 参考 资料
- 各GIS软件添加天地图方式
- 引擎开发五: Assimp库及使用
- 海外邮件收发阻碍多?网易企业邮箱为您保驾护航【网易企业邮箱怎么申请】
- 数据上链——区块链相关概念
- FOne HCI超融合系统
- 更新xcode 12.51时提示空间不足,以及macos的空间清理
- 如何批量OCR识别各类票据关键信息,导出为结构化格式数据