带你了解并发编程JMM和MESI

并发编程之JMM&MESI协议详解

JVM-JMM-CPU执行全流程

在这里插入图片描述

MESI详解

   加voliate关键字的代码,在底层汇编指令会加lock锁。lock会触发底层硬件缓存锁定机制
   早期使用总线保证缓存一致。
  1. 总线锁
    在这里插入图片描述
    CPU和内存在主板上的不同位置,CPU通过总线和内存进行通信,所以可以采用给总线加锁的形式。
    假设CPU1去写内存的变量X,那么会给总线加锁,CPU2是不能会写的。
    当然这种存在严重的问题,就是只能保证1个CPU访问内存,相当于多核变单核。

  2. 缓存一致性协议

    MESI是
    在这里插入图片描述
    在这里插入图片描述

1.CPU1读取变量,发现CPU2没有读取,X变量是独享的状态为E,CPU2读取变量X,发现CPU1读取了,此时CPU2的状态是S,变量共享,CPU1状态 E->S
2. CPU1进行写操作X=2,CPU2进行写操作X=3,那么怎么执行呢,CPU最小单位是缓存行64字节,变量X存在缓存行里,对缓存行进行加锁,那么谁能对缓存行成功加锁呢,是由总线裁决的。
3.CPU之间的缓存行是不可见的,所以需要通过总线告知另一个CPU,通知它无效了,状态变为I

在这里插入图片描述

 当一个缓存行装不下变量的时候,也就是大于64字节,此时就不能使用MESI协议,就只能用总线锁了
 缓存一致性协议是不能对寄存器生效的

小结

本篇内容不多,下篇会结合这篇,详细描述些实例以及并发三大特性等相关。
最后来个并发编程的脑图,看看自己掌握多少
https://www.processon.com/view/link/5d81dec7e4b04c14c4e7aac8

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值