小熊回收站|分析:volatile内存屏障+实现原理(JMM和MESI)( 二 )
缓存锁缓存锁的核心机制是基于缓存一致性协议来实现的 , 一个处理器的缓存回写到内存会导致其他处理器的缓存无效 , IA-32处理器和Intel 64处理器使用MESI实现缓存一致性协议(注意 , 缓存一致性协议不仅仅是通过MESI实现的 , 不同处理器实现了不同的缓存一致性协议)
MESI(缓存一致性协议)MESI是一种比较常用的缓存一致性协议 , MESI表示缓存行的四种状态 , 分别是:1、M(Modify) 表示共享数据只缓存在当前 CPU 缓存中 , 并且是被修改状态 , 也就是缓存的数据和主内存中的数据不一致2、E(Exclusive) 表示缓存的独占状态 , 数据只缓存在当前CPU缓存中 , 并且没有被修改3、S(Shared) 表示数据可能被多个 CPU 缓存 , 并且各个缓存中的数据和主内存数据一致4、I(Invalid) 表示缓存已经失效在 MESI 协议中 , 每个缓存的缓存控制器不仅知道自己的读写操作 , 而且也监听(snoop)其它CPU的读写操作 。 对于 MESI 协议 , 从 CPU 读写角度来说会遵循以下原则:CPU读请求:缓存处于 M、E、S 状态都可以被读取 , I 状态CPU 只能从主存中读取数据CPU写请求:缓存处于 M、E 状态才可以被写 。 对于S状态的写 , 需要将其他CPU中缓存行置为无效才行 。
CPU工作流程使用总线锁和缓存锁机制之后 , CPU 对于内存的操作大概可以抽象成下面这样的结构 。 从而达到缓存一致性效果:
MESI协议带来的问题MESI协议虽然可以实现缓存的一致性 , 但是也会存在一些问题:就是各个CPU缓存行的状态是通过消息传递来进行的 。 如果CPU0要对一个在缓存中共享的变量进行写入 , 首先需要发送一个失效的消息给到其他缓存了该数据的 CPU 。 并且要等到他们的确认回执 。 CPU0在这段时间内都会处于阻塞状态 。 为了避免阻塞带来的资源浪费 。 CPU中又引入了store bufferes:
如上图 , CPU0 只需要在写入共享数据时 , 直接把数据写入到 store bufferes中 , 同时发送invalidate消息 , 然后继续去处理其他指令(异步) 当收到其他所有 CPU 发送了invalidate acknowledge消息时 , 再将store bufferes中的数据数据存储至缓存行中 , 最后再从缓存行同步到主内存 。 但是这种优化就会带来了可见性问题 , 也可以认为是CPU的乱序执行引起的或者说是指令重排序(指令重排序不仅仅在CPU层面存在 , 编译器层面也存在指令重排序) 。 我们通过下面一个简单的示例来看一下指令重排序带来的问题 。
package com.zwx.concurrent;public class ReSortDemo {int value;boolean isFinish;void cpu0(){value = http://kandian.youth.cn/index/10;//S->I状态 , 将value写入store bufferes , 通知其他CPU当前value的缓存失效isFinish=true;//E状态}void cpu1(){if (isFinish){//trueSystem.out.println(value =http://kandian.youth.cn/index/= 10);//可能为false}}}这时候理论上当isFinish为true时 , value也要等于10 , 然而由于当value修改为10之后 , 发送消息通知其他CPU还没有收到响应时 , 当前CPU0继续执行了isFinish=true , 所以就可能存在isFinsh为true时 , 而value并不等于10的问题 。 我们想一想 , 其实从硬件层面很难去知道软件层面上的这种前后依赖关系 , 所以没有办法通过某种手段自动去解决 , 故而CPU层面就提供了内存屏障(Memory Barrier , Intel称之为 Memory Fence),使得软件层面可以决定在适当的地方来插入内存屏障来禁止指令重排序 。
推荐阅读
- 芯片|气候异常!东北半个月遭台风三连击,分析:短期长期都不是好事
- 板块|美元贬值一定提振美股? 华尔街分析师表示并不,但对个别板块有明显刺激作用
- 股票|美元贬值一定提振美股? 华尔街分析师表示并不,但对个别板块有明显刺激作用
- 映璇汽车工作室|终于知道它为啥难卖了,看完长城WEY内部技术团队做的竞品分析
- 解说小南风|枪火重生:从武器机制分析什么适合上手
- 游龙战神|2020年中国搜索引擎行业市场现状及发展前景分析
- 李霄鹏|盘点鲁能冠军主帅,分析李霄鹏差在哪里,解读鲁能绝无可能换帅
- 任正非称华为岗位没有年龄限制 2020通信设备制造行业现状及发展前景趋势分析研究报告
- 软银一月购入274亿科技股看涨期权 2020跨境电子商务行业现状及发展前景趋势分析研究报告
- 支付码3米外可被盗刷 2020三方支付行业现状及发展前景趋势分析研究报告
