- 1、本文档被系统程序自动判定探测到侵权嫌疑,本站暂时做下架处理。
- 2、如果您确认为侵权,可联系本站左侧在线QQ客服请求删除。我们会保证在24小时内做出处理,应急电话:400-050-0827。
- 3、此文档由网友上传,因疑似侵权的原因,本站不提供该文档下载,只提供部分内容试读。如果您是出版社/作者,看到后可认领文档,您也可以联系本站进行批量认领。
查看更多
《Apache源代码全景分析》.pdf
Apache 内存池内幕(1)
对于 APR 中的所有的对象中,内存池对象应该是其余对象内存分配的基础,不
仅是APR 中的对象,而且对于整个Apache 中的大部分对象的内存都是从内存池
中进行分配的,因此我们将把内存池作为整个APR 的基础。
2.1 内存池概述
在 C 语言中,内存管理的问题臭名昭著,一直是开发人员最头疼的问题。对于小
型程序而言,少许的内存问题,比如内存泄露可能还能忍受,但是对于 Apache
这种大负载量的服务器而言,内存的问题变得尤其重要,因为丝毫的内存泄露
以及频繁的内存分配都可能导致服务器的效率下降甚至崩溃。
通常情况下,内存的分配和释放通常都是 mallloc 和 free 显式进行的。这样做
显得单调无味,同时也可能充满各种令人厌恶的问题。对同一块内存的多次释放
通常会导致页面错误,而一直不释放又导致内存泄露,并且使得服务器性能大
大下降。
为了在大而且复杂的Apache 中避免内在的内存管理问题,Apache 的开发者创建
了一套基于池概念的内存管理方案,最后这套方法移到APR 中成为通用的内存
管理方案。
在这套方案中,核心概念是池的概念。Apache 中的内存分配的基本结构都是资
源池,包括线程池,套接字池等等。内存池通常是一块很大的内存空 间,一次
性被分配成功,然后需要的时候直接去池中取,而不需要重新分配,这样避免
的频繁的malloc 操作,而且另一方面,即时内存的使用者忘记释放内存 或者
根本就不想分配,那么这些内存也不会丢失,它们仍然保存在内存池中,当内
存池被销毁的时候这些内存将自动的被销毁。
由于Apache 中的大部分资源的分配都是从内存池中分配的,因此对于大部分的
Apache 函数,如果其内部需要进行资源分配,那么它的函数参数中总是会带有
一个内存池参数,该内存池参数指明分配内存来自的内存池,比如下面的两个
函数:
APR_DECLARE(apr_array_header_t *) apr_array_copy(apr_pool_t *p,const
apr_array_header_t *arr);
APU_DECLARE_NONSTD(apr_status_t) apr_bucket_setaside_noop(apr_bucket
*data,apr_pool_t *pool);
由于在函数的内部需要进行内存分配,因此这两个函数的参数中都指定了一个
apr_pool_t 的结构,用以指名函数内存分配来自的内存池。在后面的大部分过
程中我们对于该参数将不再做多余的解释。
Apache 中的内存池并不是仅仅一个内存池,相反而是存在多个内存池,这些内
存池之间形成层次结构。如果Apache 中仅仅存在一个内存池的 话,潜在的问题
是所有的内存分配都来自这个池,而且最要命的这些内存必须在整个 Apache 关
闭时候才被释放,这一点显然不是那么合情合理,为此 Apache 中根据处理阶
段的周期长短又引出了子内存池的概念,与之对应的是父内存池以及根内存池
的概念,它们的唯一区别就是存在的周 的不同而已。比如 对于HTTP 连接而言,
包括两种内存池:连接内存池和请求内存池。由于一个连接可能包含多个请求,
因此连接的生存周 总是比一个请求的周期长,为此连接处 理中所需要的内存
则从连接内存池中分配,而请求则从请求内存池中分配。而一个请求处理完毕后
请求内存池被释放,一个连接处理后连接内存池被释放。根内存池 在整个
Apache 运行 间都存在。Apache 中一个内存池的层次结构图可以大致如下描述:
内存池的层次图
2.2 内存池分配结点
在了解内存池的概念之前,我们首先了解一些内存池分配结点的概念。为了能够
方便的对分配的内存进行管理,Apache 中使用了内存结点的概念来 描述每次
分配的内存块。其结构类型则描述为 apr_memnode_t,该结构定义在文件
Apr_allocator.h 中,其定义如下:
/** basic memory node structure */
struct apr_memnode_t {
apr_memnode_t *next; /** next memnode */
apr_memnode_t **ref; /** reference to self */
您可能关注的文档
- 《@开房大典【恒大】管理系统审批流程及权限相关规定2016年_@地产智库8848(九舍会)企业管理》.pdf
- 《@开房大典【恒隆】企业研究_零负债的商业地产商2016年高通智库_@地产智库8848(九舍会)企业管理》.pdf
- 《@开房大典【新鸿基】上海国金中心2016年高通智库_@地产智库8848(九舍会)市场发展》.pdf
- 《@开房大典【星河湾】客户满意度及品牌形象研究2016年方舟_@地产智库8848(九舍会)企业管理》.pdf
- 《@开房大典【珠投】广东广州珠江帝景项目可行性研究报告2016年_@地产智库8848(九舍会)投资立项》.pdf
- 《@开房大典【绿地】中高端高层住宅技术导则2016年_@地产智库8848(九舍会)企业管理》.pdf
- 《@开房大典【绿城】代建业务模式下人才发展论坛2016年_@地产智库8848(九舍会)人力资源》.pdf
- 《@开房大典【绿城】企业研究_合作撬动资源2016年高通智库_@地产智库8848(九舍会)企业管理》.pdf
- 《@开房大典【绿城】员工手册2016年_@地产智库8848(九舍会)人力资源》.pdf
- 《@开房大典【绿城】员工退休管理规定2016年_@地产智库8848(九舍会)人力资源》.pdf
最近下载
知传链电子书
- 全国会计从业资格考试真题详解+上机题库——会计基础+财经法规与会计职业道德+会计电算化三合一.pdf
- AutoCAD机械绘图案例教程.pdf
- 微型计算机原理及应用教程(第2版).pdf
- 从零开始——AutoCAD 2015中文版建筑制图基础培训教程.pdf
- 边做边学——Photoshop CS6 图像制作案例教程.pdf
- 边做边学——3ds Max 2014动画制作案例教程.pdf
- 全国职称计算机考试讲义•真题•预测三合一——AutoCAD 2004制图软件.pdf
- 全国职称计算机考试讲义•真题•预测三合一——Word 2007中文字处理.pdf
- 全国职称计算机考试讲义•真题•预测三合一——中文Windows XP操作系统.pdf
- 全国职称计算机考试讲义•真题•预测三合一——PowerPoint 2003中文演示文稿.pdf
文档评论(0)