高并发内存池
文章平均质量分 53
楠c
这个作者很懒,什么都没留下…
展开
-
设计高并发内存池释放流程
目录线程缓存释放中心缓存释放页缓存释放疑问及解答 线程缓存释放 挂得越来越多,等于MAX_SIZE,慢启动所导致的MAX_SIZE大小。说明都回来了,便开始归还到中心缓存 中心缓存释放 归还到中心缓存怎么找到,分割出去的Span呢,在这个桶下,同一大小的Span有多个。 以下图为例,在申请的时候, 页缓存释放 疑问及解答 ...原创 2021-07-16 23:05:30 · 113 阅读 · 0 评论 -
设计高并发内存池申请流程
实现线程缓存 分析完整体架构我们来从最底层实现。 取下一个对象 之前提到这里使用头四个字节来存下一个对象的。适用于32位以及64位 头插与头删 将对象头插与头删 这样就可以实现从自由链表中放对象,拿对象。 和STL空间配置器结构类似,多个不同大小的对象,所以用一个对象数组。 假如我们最大也是128个字节,以8为间隔,那么数组长度就是16 对象映射到桶 现在来一个对象,怎么算他在那个桶呢? TLS技术 测试 公共头文件 #pragma once #include <iostream&原创 2021-07-16 22:07:11 · 163 阅读 · 2 评论 -
高并发内存池整体架构
目录提要分析线程缓存中心缓存页缓存 提要 在之前分析的定长内存池和哈希映射的自由链表内存池 为什么没解决呢?对于2和3 分析 线程缓存 线程缓存,每个线程独有,当小于MAX_BYTES我们定义为64k,线程从这里申请内存,不需要加锁因为每个线程独享一个cache,这也是这个并发线程池高效的地方。 中心缓存 中心缓存所有线程共享一个,线程缓存按需从中心缓存获取自己的对象。中心缓存周期性回收自己在线程缓存中的独享,避免一个线程占用太多对象,其他线程吃紧。达到内存分配在多个线程更加均衡的按需调度。所以中心原创 2021-07-16 19:56:21 · 158 阅读 · 2 评论 -
简单内存池与定长内存池
目录内存碎片最简单的内存池申请释放定长内存池哈希映射的freelist池 内存碎片 最简单的内存池 申请 释放 定长内存池 哈希映射的freelist池 内碎片 对比内碎片与外碎片原创 2021-07-16 18:40:05 · 178 阅读 · 1 评论