白话Java基础—内存模型是怎么解决缓存一致性问题的?

内存模型是怎么解决缓存一致性问题的?

本系列呢,主要将我理解的Java基础内容,以比较白话的方式,解释出来,希望能帮助大家快速的理解一些概念。


正文开始,解决缓存一致性问题,通常来说有以下两种方案:

  • 通过总线加 LOCK锁的方式(早期)

  • 通过缓存一致性协议(Cache Coherence Protocal)

一、缓存一致性协议

最出名的就是 Intel的 MESI协议,MESI协议保证了每个缓存中使用的共享变狼的副本是一致的。

核心思想是,当CPU写数据时,如果发现锁操作的变量时共享变量, 会发出信号通知其他CPU将该变量的缓存行置为无效状态。 因此当其他CPU读取变量时,发现缓存中的该变量缓存是无效的,那么将会从内存中重新读取。

在MESI协议中,每个缓存可能有4各状态:

  • M(Modified)

  • E(Exclusive)

  • S(Shared)

  • I(Invalid)

MESI

MESI协议可以保证缓存的一致性,但是无法保证实时性。

二、内存模型

  • 缓存一致性(Cache Coherence): 解决是多个副本之间的数据的一致性问题。

  • 内存一致性(Memory Consistency), 保证的是多线程访问内存时可以读到的什么值。

内存一致性,来解决并发编程中的原子性、有序性和一致性问题,包括(并发编程中的原子性、有序性和可见性)。而缓存一致性说的就是并发模型中的可见性。

实现内存一致性模型的时候可能会用到缓存一致性模型。

三、参考文档

内存模型是怎么解决缓存一致性问题的?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值