【高并发内存池】第二弹之threadcache 线程缓存

news/2023/6/8 0:27:55

1.为什么线程向threadcache申请内存不需要加锁?
因为没有把cache设置成全局变量,而是使用了TLS(线程局部存储),作用是当前内存只可当前线程见到,其他线程没有使用权,避免了加锁的操作,保证了线程数据的独立性。

2.TLS的无锁访问?
但不是每个线程被创建时就立马有了属于自己的thread cache,而是当该线程调用相关申请内存的接口时才会创建自己的thread cache,因此在申请内存的函数中会包含以下逻辑。
//通过TLS,每个线程无锁的获取自己专属的ThreadCache对象
if (pTLSThreadCache == nullptr)
{
pTLSThreadCache = new ThreadCache;
}
在这里插入图片描述
3.线程申请threadcache内存具体流程?
线程调用ConcurrentAlloc,生成一个threadcache的指针,指向threadcache,再调用threadcache里的allocate,allocate里面的自由链表数组不为空的话,找到哈希桶具体位置,调用自由链表的头指针freelist中的pop,pop返回一个void类型的obj内存供线程使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-4558379.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

lifepo4是什么?

Lithium-ion iron phosphate 磷酸铁锂电池,是一种使用磷酸铁锂(LiFePO4)作为正极材料,碳作为负极材料的锂离子电池,单体额定电压为3.2V,充电截止电压为3.6V~3.65V。 磷酸铁锂电池具有工作电压高、能量密度…

Px、em、rem、%、vw、wh、vh、vmin、vmax等单位的区别!

这里是修真院前端小课堂,每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析前端知识/技能,本篇分享的是: 【Px、em、rem、%、vw、wh、vh、vmin、vmax&am…

2023年准备报考软考,考哪个?

一般建议从软考中级考试考,科目多,难度也不大!关于中级科目。计算机软件类包括:软件评测师、软件设计师、软件过程能力评估师。计算机网络类包括:网络工程师。计算机应用技术类包括:多媒体应用设计师、嵌入…

python turtle画彩虹的代码_Python利用turtle库绘制彩虹代码示例

语言:Python IDE:Python.IDE 需求 做出彩虹效果 颜色空间 RGB模型:光的三原色,共同决定色相 HSB/HSV模型:H色彩,S深浅,B饱和度,H决定色相 需要将HSB模型转换为RGB模型 代码示例&…

opencv hsv 颜色空间 彩虹色

原文链接: opencv hsv 颜色空间 彩虹色 上一篇: opencv 鼠标交互 切割图片 下一篇: opencv rgb 颜色空间 彩虹色 参考 https://blog.csdn.net/u010429424/article/details/76577399 https://blog.csdn.net/taily_duan/article/details/51506776 rgb空间 hsv 颜…

19/365 java 多线程

1. 基础概念 程序:指令集和数据的集合。(静态) 进程:对程序的一次执行。(动态) 对同一个程序,执行两次,那就是两个进程。 进程是系统资源分配的基本单位 线程:一个进程…

Python:基础练习 Fibonacci数列

问题描述 Fibonacci数列的递推公式为:FnFn-1Fn-2,其中F1F21。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少 乍一看,比较简单,于是: nint(input()) f[1,1] f…

Python基础训练(一)

#profit.pynb float(input("请输入本金:")) #输入本金并转换为浮点数nr float(input("请输入年利率:")) #输入年利率并转换为浮点数ny int(input("请输入年份:")) #输入年份并转换为整数amount nb * (1nr/…