CPU的缓存一致性协议与Volatile

我们都知道CPU有三级缓存,L1,L2,为核心独享,L3为CPU共享,而当前主流的CPU还都支持Store Buffer 和invalid queue,在这种情况下MESI是无法生效的,而在一些指令重排的情况下,核心读到的值可能不是最新的,这时就需要通过指令重排来进行同步,指令重排不止具备禁止重排序的特性,还具备同步刷新的特性

storebuffer和invalidate queue的设计是为了加速CPU的内存访问而设计的,但是在某些指令重排的情况下,可能会导致数据不一致的问题,所以新增了内存屏障的指令,也就是说内存屏障是为storebuffer和invalidatequeue 而设计的,目的是解决指令重排序情况下的不一致问题

volatile是JVM的内存语义,这里借用知乎中的一个回答:

volatile是java语言层面给出的保证,MSEI协议是多核cpu保证cache一致性的一种方法,中间隔的还很远,我们可以先来做几个假设:

  1. 回到远古时候,那个时候cpu只有单核,或者是多核但是保证sequence consistency,当然也无所谓有没有MESI协议了。那这个时候,我们需要java语言层面的volatile的支持吗?
当然是需要的,因为在语言层面编译器和虚拟机为了做性能优化,可能会存在 指令重排的可能,而volatile给我们提供了一种能力,我们可以告诉编译器,什么可以重排,什么不可以。
  1. 那好,假设更进一步&#
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值