高并发内存池 - 整体框架设计
高并发内存池 - 整体框架设计项目 gitee 链接 高并发内存池项目项目 github 链接 高并发内存池项目现代很多的开发环境都是多核多线程在申请内存的场景下必然存在激烈的锁竞争问题。malloc本⾝其实已经很优秀那么我们项⽬的原型tcmalloc就是在多线程⾼并发的场景下更胜⼀筹所以这次我们实现的内存池需要考虑以下⼏⽅⾯的问题。性能问题。多线程环境下锁竞争问题。这也是这个项目优于malloc的关键原因内存碎⽚问题。concurrent memory pool 主要由以下3个部分构成thread cache线程缓存是每个线程独有的⽤于⼩于 256KB 的内存的的分配线程从这⾥申请内存不需要加锁每个线程独享⼀个 cache 这也就是这个并发线程池⾼效的地⽅。central cache中⼼缓存是所有线程所共享thread cache 是按需从central cache 中获取的对象。central cache 合适的时机回收thread cache中的对象避免⼀个线程占⽤了太多的内存⽽其他线程的内存吃紧达到内存分配在多个线程中更均衡的按需调度的⽬的。central cache 是存在竞争的所以从这⾥取内存对象是需要加锁⾸先这⾥⽤的是桶锁其次只有 thread cache 的没有内存对象时才会找central cache所以这⾥竞争不会很激烈。不会很激烈。page cache⻚缓存是在central cache 缓存上⾯的⼀层缓存存储的内存是以⻚为单位存储及分配的central cache 没有内存对象时从 page cache分配出⼀定数量的 page 并切割成定⻓⼤⼩的⼩块内存分配给 central cache 。当⼀个 span 的⼏个跨度⻚的对象都回收以后 page cache 会回收 central cache 满⾜条件的 span 对象并且合并相邻的⻚组成更⼤的⻚缓解内存碎⽚的问题。