码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Java——》MESI


    推荐链接:
        总结——》【Java】
        总结——》【Mysql】
        总结——》【Redis】
        总结——》【Kafka】
        总结——》【Spring】
        总结——》【SpringBoot】
        总结——》【MyBatis、MyBatis-Plus】
        总结——》【Linux】
        总结——》【MongoDB】
        总结——》【Elasticsearch】

    Java——》MESI

    • 一、概念
    • 二、作用
    • 三、状态:4种
    • 四、MESI VS volatile
    • 五、有了MESI协议,为啥还有volatile?

    数据一致性协议:

    • MSI
    • MESI
    • MOS
    • Synapse Firefly Dragon

    一、概念

    MESI是协议,是规范,是interface,需要CPU厂商实现。

    MESI是CPU缓存一致性的协议,大多数的CPU厂商都根据MESI去实现了缓存一致性的效果。

    二、作用

    让各个CPU的数据保持一致性

    三、状态:4种

    状态描述备注
    M = Modified被修改
    E = Exclusive独享的
    S = Shared共享的
    I = Invalid无效的从内存中读取最新的数据

    四、MESI VS volatile

    MESI:是CPU硬件层面上的一致性
    volatile:是Java中JMM层面的一致性。

    MESI:有一套固定的机制,无论你是否声明了volatile,他都会基于这个机制来保证缓存的一致性(可见性)。
    volatile:存在一些问题,不过也有其他的处理方案(使用总线锁,但时间成本太高 并且效率低,如果锁了总线,就一个CPU核心在干活)。

    五、有了MESI协议,为啥还有volatile?

    MESI协议存在问题:
    MESI保证了多核CPU的独占cache之间的可见性,但是CPU不是说必须直接将寄存器中的数据写入到L1,因为在大多是×86架构的CPU中,寄存器和L1之间有一个store buffer,寄存器值可能落到了store buffer,没落到L1中,就会导致缓存不一致。而且除了×86架构的CPU,在arm和power的CPU中,还有load buffer,invalid queue都会或多或少影响缓存一致性!

    MESI协议和volatile不冲突。

    • MESI是CPU层面的,CPU厂商很多实现不一样,而且CPU的架构中的一些细节也会有影响,比如Store Buffer会影响寄存器写入L1缓存,导致缓存不一致。
    • volatile的底层生成的是汇编的lock指令,这个指令会要求强行写入主内存,并且可以忽略Store Buffer这种缓存从而达到可见性的目的,而且会利用MESI协议,让其他缓存行失效。
  • 相关阅读:
    【好书推荐】C语言程序设计:现代方法(第二版)
    SSM之spring注解式缓存redis->redis整合,redis的注解式开发及应用场景,redis的击穿穿透雪崩
    opengles 绘制图元 ——glDrawArrays() 相关API介绍 (十)
    嵌入式系统中如何正确使用动态内存?
    如何申请高新技术企业认证?企业到底需要多少专利?
    2-python:标识符命名
    职场漫谈:为什么越是内卷的行业越有人争着抢着往里冲?好奇怪的说...
    WebODM win10安装教程(亲测)
    输入输出系统:M/M/1排队系统例题
    【设计模式_实验①_第六题】设计模式——接口的实验&模拟应用实验作业一
  • 原文地址:https://blog.csdn.net/weixin_43453386/article/details/134265746
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号