高并发内存池: 介绍

代码: 高并发内存池

编写: 高并发内存池: 编写

一.功能介绍

功能: 用于实现高效的多线程内存管理(替代系统的内存分配相关的函数(malloc, free))

  • 性能的提升: 池化技术, 锁竞争的减小
  • 处理内存碎片: 内碎片, 外碎片

池化技术:

  • 概念:预先向系统申请过量的资源, 自己管理.->提高性能(每次申请资源都有较大的开销, 提前申请好, 使用的时候就快)
  • 内存池: 预先申好大块内存自己管理, 程序申请空间时向内存池申请, 释放还给内存池

锁竞争的减小

  • tcmalloc采用TLS(本地缓存机制), 每个线程独享一段内存缓冲区, 无需加锁
  • CentralCache采用桶锁->竞争粒度更小(多线程向同一桶申请内存才会竞争)
  • PageCache使用基数树优化后,通过PageID获取Span无需加锁(且高度低,查询更快)

内碎片

  • 概念: 内存对齐导致部分空间的浪费
  • 处理: 采用分段对齐, 使内存对齐所浪费的比例不超过10%

外碎片

  • 概念: 空闲的内存分散在堆上(程序申请大块内存时, 空间够但由于不连续导致无法分配)
  • 处理: 以页为单位分配Span对象, PageCache回收时会合并相邻的页

二.核心思想

高并发内存池: 3层缓存机制, 

  • ThreadCache: 每个线程独有, 做小块内存的分配, 
  • CentralCache: 给上一层分配内存, 合适的时候回收
  • PageCache: 给上一层分配内存, 合适的时候回收并合并相邻的页

ThreadCache : 用于小对象的分配于回收

CentralCache(单例) : 均衡调度

PageCache(单例) : 管理大块内存的分配于回收

效果:

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值