学习了下马士兵老师的公开课,特此做下笔记,以供交流学习。
缓存一致性协议和 java 的 volatile 实现无任何关系
MESI 只是 CPU 层级的保证一致性的一种方式,最简单粗暴保证 CPU 一致性的其实就是直接锁总线,因为总线只有一条! 而 JVM 的 hotspot 就是直接锁总线,确保了 volatile 作用. 所以二者毫无关系!!!
因为因特尔的用的比较多,所以网上文章写的都是
保证 cpu 间数据一致性。
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位就是一个段