Java高级开发

内存屏障和CPU缓存

2019-12-29  本文已影响0人  依弗布德甘

CPU缓存

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

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

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

内存屏障 多核多线程

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

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

上一篇 下一篇

猜你喜欢

热点阅读