缓存一致性协议(MESI)详解

缓存一致性协议是Java内存模型中的一种协议,具体如图所示:
Java内存模型图

缓存一致性协议分为四种状态:
  1. Modified(修改):数据有效,数据被修改了,和内存中数据不一致,数据只存在于本Cache中。
  2. Exclusive(独享):数据有效,数据和内存中的数据一致,数据只存在于本Cache中。
  3. Shared(共享):数据有效,数据和内存中的数据一致,数据存在多个Cache中。
  4. Invalid(无效):数据无效,一旦数据被标记为无效,那效果就等同于它从来没被加载到缓存中。
缓存一致性协议工作流程/原理:
  1. CPU a从缓存中读取了缓存行a,其他CPU都没有读,这时这条缓存行的状态为Exclusive(独享)状态。
  2. 这时CPU b也从缓存中读取了缓存行a,这时这条缓存行的状态为Shared(共享)状态。
  3. 当CPU a修改了缓存行a,并从回写到缓存中,这时这条缓存行的状态为Modified(修改)状态,然后会回写到主存中去。
  4. 每个CPU读取完缓存行之后都在内存中监听已读缓存行的状态,这时CPU b就会监听的缓存行a已被修改,此时,CPU b就会把他设置为Invalid(无效)状态,无效状态的数据会被丢弃,如果想继续操作的话,还需要到主存中重新获取。
  5. 最后,这条缓存行a在CPU a中的状态又会改为Exclusive(独享)状态。

关于Java的内存模型可以看这篇文章:https://blog.csdn.net/xianyun1992/article/details/107723694

如果N个CPU同一时间要去修改同一份缓存行会怎样?

这里会有一个裁决机制,系统自动裁决。

什么是缓存行?

最小存储单元,根据CPU品牌不同,有可能是32字节、64字节或者128字节。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

素人岳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值