阿里云一面:并发场景下的底层细节 - 伪共享问题

本文介绍了CPU缓存的三级结构以及缓存行的概念,深入探讨了伪共享问题,即不同线程操作相邻内存地址的变量时,由于共享同一缓存行导致的性能下降。通过padding和Java的`@Contended`注解提出了解决方案。
摘要由CSDN通过智能技术生成

三级缓存架构

众所周知,为了缓解内存和 CPU 之间速度不匹配的矛盾,引入了高速缓存这个东西,它的容量比内存小很多,但是交换速度却比内存要快得多。

之前我们画过这样的分级存储体系结构:

https://gitee.com/veal98/images/raw/master/img/20210415105520.png

事实上,高速缓存仍然存在细分,也称为三级缓存结构:一级(L1)缓存、二级(L2)缓存、三级(L3)缓存

越靠近 CPU 的缓存,速度越快,容量也越小。所以 L1 缓存容量最小但是速度最快;L3 缓存容量最大同时速度也最慢

当 CPU 执行运算的时候,它会先去 L1 缓存查找所需的数据、如果没有找到的话就再去 L2 缓存、然后是 L3 缓存,如果最后这三级缓存中都没有命中,那么 CPU 就要去访问内存了。

显然,CPU 走得越远,运算耗费的时间就越长。所以尽量确保数据存在 L1 缓存中能够提升大计算量情况下的运行速度

需要注意的是,CPU 和三级缓存以及内存的对应使用关系:

  • L1 和 L2 都是只能被一个单独的 CPU 核心使用

  • L3 可以被单个插槽上的所有 CPU 核心共享

  • 内存由全部插槽上的所有 CPU 核心共享

如下图所示:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值