美文网首页Java高级开发
内存屏障和CPU缓存

内存屏障和CPU缓存

作者: 依弗布德甘 | 来源:发表于2019-12-29 13:14 被阅读0次

    CPU缓存

    CPU高速缓存类型有一级缓存,二级缓存,三级缓存。
    在读取数据时会先从一级缓存查找,再找二级缓存,再找三级缓存,然后是内存,最后是外存储器。读写数据时为了保证数据一致性,各大cpu厂商定义的一套公共协议-MESI协议,从而保证数据最终一致性

    MESI协议
    修改态, 专有态,共享态,无效态,

    • CPU性能优化手段-运行时指令重排序
      为了提高CPU处理新能,CPU遵循as-if-serial语义,可能将后面的命令优先执行

    as-if-serial语义
    编译器和处理器为了提高并行度,不管怎么重新排序,单线程内程序的执行结果不能被改变

    内存屏障 多核多线程

    1. 缓存的数据与主内存的数据并不是实时同步的,同一时间点,各CPU所看到同一内存地址的数据值可能不是一致的
    2. 虽然遵循了as-if-serial语义,但只针对单CPU自己执行情况下,无法分辨因果关联,可能会出现乱序

    处理器为了解决以上两个问题,提供了内存屏障指令Memory Barrier

    • 读内存屏障(Load Menory Barrier)
      在指令钱插入Load Barrier 让高速缓存的数据失效,强制从主内存加载数据,从而保证读取数据保存一致性

    • 写内存屏障(Store Menory Barrier)
      在指令后插入Store Barrie 能让数据写入主内存中,让其他线程可见。

    相关文章

      网友评论

        本文标题:内存屏障和CPU缓存

        本文链接:https://www.haomeiwen.com/subject/iksyoctx.html