Memory Pool/Cache的解决方案

虽然Memory Pool/Cache似乎是比较偏系统底层的东西,但是很多大规模分配和释放memory的程序在到了优化阶段之后,使用Memory Pool/Cache几乎是一个必备的手段。这跟互联网应用的大量连接的应用类似,这类应用往往也要使用Thread Pool,来避免不停创建/销毁线程的高昂代价。

至于Memory Pool和Memory Cache的相同与不同之处,我个人是这么理解的:

1 相同之处:(为了达到提高效率的目的)允许有效数据和无效数据并存。而且,无论是Pool还是cache,往往都是限定大小的区域(因为在运行时改变大小,就意味着巨大的开销)。

2 不同之处:对Pool来说,有效数据是不可销毁的,重复利用的只是那些无效数据所占据的空间。但是对cache来说,它的全部内容都是可替换的。究其原因还是因为二者目的不同:cache是为了缓和两种存储设备速度上的差距而出现的存储结构(这意味着,如果一种设备速度快,则贪婪的利用此种设备);而Pool是为了缓和分配和释放存储之间的速度差距而出现的存储结构。

而这里另外还有一个易混淆的概念:buffer。buffer,翻译作缓冲区。字面上的意思似乎跟cache(高速缓存)差不多。但是还是有区别的。缓冲区也是工作在两个设备之间,但是不同于cache工作在两种速度差异极大的设备之间,它适用的范围是若干个速度差不多的设备,而这些设备的存储方式是正好相反的:读和写。例如,最常见的buffer莫过于TCP/IP协议栈的buffer,它的出现就是因为网络写入和协议栈读取速度不完全匹配,但是二者的速度是差不多的,如果网络和协议栈的速度不匹配,那么buffer再大也是没有用的。

【若干解决方案】

1 最出名的莫过于Linux内核的Slab/buddy系统。链接就不用给了。

2 各种大型的开源软件中,例如nginx/apache的APR/Berkeley DB/memcached/boost/stlport

3 刚看到的PJLIB。http://www.pjsip.org./pjlib/docs/html/main.htm

4 网上某些牛人的实现方案(待添加):

http://febird.javaeye.com/blog/501549

【留着以后看】

http://www.memorymanagement.org/articles/begin.html

JJHou的文章《池内春秋》

http://jjhou.boolan.com/programmer-13-memory-pool.pdf


转载于:https://www.cnblogs.com/microgrape/archive/2011/05/12/2043933.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值