ConcurrentMemoryPool——基于TLS的三重结构高并发内存池

本文介绍了ConcurrentMemoryPool,一个利用TLS解决并发锁竞争的内存池。内存池由Thread Cache、Central Cache和Page Cache组成,旨在提高内存分配效率,缓解内存碎片和线程安全问题。Thread Cache使用线程局部存储,每个线程拥有独立的缓存,减少锁竞争。Central Cache定期回收thread cache的内存,确保资源均衡。Page Cache负责回收和合并内存,以处理大内存需求并缓解内存碎片。
摘要由CSDN通过智能技术生成

@ConcurrentMemoryPool

ConcurrentMemryPool——基于TLS的三重结构高并发内存池

(本来应该在说明思路的时候放一部分代码,这样就理解起来也就更加容易了。但是不知是什么原因,我是用CSDN的markdown编辑器编辑时,一插入代码网页就出错奔溃,因为没有及时保存,我重写了很多次。所以这里就不放代码了,请大家谅解。全部代码我都将在最后以链接的方式给出,大家可以先点开代码链接,结合代码一起看本篇博客,代码中我都给出了详细的注释,配合“食用”效果更佳噢!)

什么是内存池?

池化技术在计算机中应用十分广泛,而比较常用的就是内存池和线程池。如果你对线程池有一定的了解,那么理解内存池就自然也不是什么困难的事情。
“池”在我们日常生活中通常都是用来储水的,而计算机中的“池”自然也就是用来储存一些我们经常会使用到的一些资源。顾名思义,线程池中储存的是线程资源,内存池中储存的是内存资源。
内存池就是先将内存资源申请出来,放入内存池中。这样,当我们需要申请内存资源时,就可以直接去内存池中取,而不需要去向系统申请了。这样就减少了申请内存的消耗,提高了申请内存的效率。释放内存也直接释放回内存池即可,而不需要还给系统,提高了释放内存的效率。我们在C语言中所使用到的malloc就是一个内存池。

为什么需要内存池?

  • 1.效率问题:如果我们直接向系统申请内存,当我们需要频繁的申请释放内存时,就需要频繁的与系统层产生交互,多次切换用户态和内核态,而用户态和内核态之间的切换的消耗是非常大的,因此申请内存的消耗就会很大,程序效率也就随之降低了。
  • 2.内存碎片问题:如果我们频繁的申请和释放小块的内存,系统的内存就会因此被碎片化,虽然总的内存被占用并不多,但是却没有了连续的大块内存,这个时候如果我们需要使用大内存的空间时,就无法申请了。

设计思路

内存池主要需要解决什么问题呢?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值