ConcurrentMemryPool——基于TLS的三重结构高并发内存池
(本来应该在说明思路的时候放一部分代码,这样就理解起来也就更加容易了。但是不知是什么原因,我是用CSDN的markdown编辑器编辑时,一插入代码网页就出错奔溃,因为没有及时保存,我重写了很多次。所以这里就不放代码了,请大家谅解。全部代码我都将在最后以链接的方式给出,大家可以先点开代码链接,结合代码一起看本篇博客,代码中我都给出了详细的注释,配合“食用”效果更佳噢!)
什么是内存池?
池化技术在计算机中应用十分广泛,而比较常用的就是内存池和线程池。如果你对线程池有一定的了解,那么理解内存池就自然也不是什么困难的事情。
“池”在我们日常生活中通常都是用来储水的,而计算机中的“池”自然也就是用来储存一些我们经常会使用到的一些资源。顾名思义,线程池中储存的是线程资源,内存池中储存的是内存资源。
内存池就是先将内存资源申请出来,放入内存池中。这样,当我们需要申请内存资源时,就可以直接去内存池中取,而不需要去向系统申请了。这样就减少了申请内存的消耗,提高了申请内存的效率。释放内存也直接释放回内存池即可,而不需要还给系统,提高了释放内存的效率。我们在C语言中所使用到的malloc就是一个内存池。
为什么需要内存池?
- 1.效率问题:如果我们直接向系统申请内存,当我们需要频繁的申请释放内存时,就需要频繁的与系统层产生交互,多次切换用户态和内核态,而用户态和内核态之间的切换的消耗是非常大的,因此申请内存的消耗就会很大,程序效率也就随之降低了。
- 2.内存碎片问题:如果我们频繁的申请和释放小块的内存,系统的内存就会因此被碎片化,虽然总的内存被占用并不多,但是却没有了连续的大块内存,这个时候如果我们需要使用大内存的空间时,就无法申请了。
设计思路
内存池主要需要解决什么问题呢?