内存屏障(Memory Barrier)(二)什么是读屏障?

《内存屏障(Memory Barrier)(一)什么是写屏障?》
《内存屏障(Memory Barrier)(二)什么是读屏障?》
《内存屏障(Memory Barrier)(三)volatile关键字是怎么实现的?》


我们知道了写屏障的由来,下面我们说下读屏障

一、Store Buffer的性能瓶颈

我们在写屏障那篇文章中说了Store Buffer,但是如果Store Buffer满了,说明是在等待Invalidate Acknowledge,导致不能及时刷新到cache。

而cpu返回Invalidate Ack需要这样一个流程

cpu
invalid
cache line
返回Invalidate Ack

但是如果一个cpu非常忙,可能要等比较久才返回Invalidate Ack,此时为了提升性能就引入了Invalid Queue

二、Invalid Queue

Invalid Queue的作用就是:

先将Invalid消息放入
Invalid Queue
返回Invalid Ack
后续进行Invalid消息处理
并失效缓存行

三、缓存失效

加入了Invalid Queue提升了性能,但是可能又带来了其他的问题,示例如下:
缓存失效

  1. cpu收到失效消息后放入了Invalid Queue
  2. 此时读取b==0成立了
  3. a的数据还没来得及处理,在cpu1中还不是失效状态。

四、读屏障

在这个时候,我们就要保障,cpu1在读取a的数据之前,先把a的数据在Invalid Queue中处理掉,然后再进行读取,这就是我们所说的读屏障的作用

五、总结

我们本篇文章从原理角度,跟你说明了:

  • Store Buffer因为要等待Invalid Ack会有性能瓶颈
  • 通过引入Invalid Queue解决Invalid Ack带来的性能瓶颈
  • Invalid Queue带来的失效问题
  • 引入读屏障,解决失效问题
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值