跟着卷卷龙一起学 Camera-- 内存池浅析 05
这里主要介绍一些常用的内存池类型。以及需要考虑的问题。
定长内存分配器
优点:简单。分配和释放的效率高,解决实际中特定场景下的问题有效。缺点:功能单一。只能解决定长的内存需求
线程安全
如果你的程序有大量线程申请释放内存,那么这种方案下锁的竞争将会非常激烈,线程这样的场景下使用该方案不会有很好的性能。内存池不应该局限在单线程场景,多线程的时候,直接给内存池一把锁保护就可以了。如果你的程序有大量线程申请释放内存,那么这种方案下锁的竞争将会非常激烈,线程这样的场景下使用该方案不会有很好的性能。
线程局部存储
我们可以创建一个全局变量,因此所有线程都可以使用该全局变量,但与此同时,我们将该全局变量声明为线程私有存储,那么这时虽然所有线程依然看似使用同一个全局变量,但该全局变量在每个线程中都有自己的副本,变量指向的值是线程私有的,相互之间不会干扰。如:__thread int a = 1; // 线程局部存储
既然多线程使用线程池存在竞争问题,那么干脆我们为每个线程维护一个内存池就好了,这样多线程间就不存在竞争问题了。线程局部存储,正是用于解决这一类问题。
虽然上述方法可以解决很多关于线程的问题,但是在实际应用的时候应该根据切身需求,设计适合自己的。
版权声明: 本文为 InfoQ 作者【卷卷龙】的原创文章。
原文链接:【http://xie.infoq.cn/article/25d415540a492b4ccd213e338】。文章转载请联系作者。
评论