发布网友 发布时间:2022-04-22 15:11
共1个回答
热心网友 时间:2023-11-10 08:08
缓存行:64字节;缓存行越大,局部空间效率高,读取时间慢;反之局部空间效率低读取速度快,所以折中选择了64个字节;
如何保证CPU中不同L1缓存、L2缓存的 缓存一致性?
MESI缓存一致性协议,因特尔CPU的协议
其他的缓存一致性协议有:
MSI/MOSI/Synapse/Firefly/Dragon
L1:CPU一级缓存;
L2:CPU二级缓存;
L3:CPU*缓存;
其中 L3 是计算 CPU共享的,L1、L2是CPU中 核 独享的;
缓存一致性的实现:如上图
如果左侧核的X值在L1中被修改了----modified,此时会有通知到右侧的核 的X为---invalid;
之后,右侧再读取X值时发现无效会往上层查询有效数据;
为了减少 CPU 中缓存数据被不同的 核 读取,程序设计中有一个 RingBuffer 环形缓存,在实际存储变量 INITAL_CURSOR_VALUE 前后都增加了7个变量,long类型的长度时8字节;CPU在读取数据时会修改的变量只有 INITAL_CURSOR_VALUE ,数据只会被其中一个核读取,就不会出现使用 MESI缓存一致性协议 去解决缓存一致性导致的耗时问题;
除了上述方式,JDK1.8中 使用了注解的方式强制让一个变量占据一个缓存行;
@sun.misc.Contented