转载

缓存一致性协议和 volatile 到底什么关系?

缓存一致性协议和 java 的 volatile 实现无任何关系
MESI 只是 CPU 层级的保证一致性的一种方式,最简单粗暴保证 CPU 一致性的其实就是直接锁总线,因为总线只有一条!
而 JVM 的 hotspot 就是直接锁总线,确保了 volatile 作用.
所以二者毫无关系!!!

cache line的概念 缓存行对齐 伪共享

a. cache是以cache line为单位与内存映射的,cache只要命中了就是命中64字节,对应内存中连续的64个地址,这64个地址刚好对应了地址的低6位。所以这6位被划为一个段。
b. cache分为了64组,要有hash方式确定内存中的地址在哪个cache组,可以用36位地址中的高30位模64得到组索引,模64和和取高30位中的低6位得到的结果是相同的。所以这6位就是另一个段。
c. 因为内存大小远远大于cache,内存和cache的映射必然是多对一(即多个内存映射到一块cache),这样必然会产生冲突,36位地址的高24位就是用来解决冲突问题的,所以这24位就是一个段

因为因特尔的用的比较多,所以网上写的都是英特尔的 MESI 协议

CPU 的乱序执行

正文到此结束
本文目录