java CPU缓存一致性详解

I. CPU多级缓存

CPU的时钟频率非常的快,跑起来的速度远远超过了内存、硬盘。《码农翻身》形象的比喻CPU为阿甘,跑的速度是内存的100倍,硬盘的1000多万倍。如果直接靠CPU直接和内存打交道,那么CPU要等待太久,浪费资源。

我们平时编写的程序中,包含着很多连续创建的数组、对象,各种循环、递归、调用同一函数等,其实本质上符合了局部性原理。局部性原理具体是指在CPU访问存储设备时,无论是存取数据还是存取指令,都趋于聚集在一片连续的区域中,主要包含时间与空间上的局部性。

时间局部性 (Temporal Locality):如果一个数据被访问,那么在近期它很可能还会被再次访问。
空间局部性 (Spatial Locality):如果一个数据被访问,那么与它相邻的数据也很快会被访问。
有了这样的特性,就可以在CPU和内存之间添加高速缓存存储CPU经常访问的数据,如下图所示,缓解CPU和内存速度严重差异的问题。

在这里插入图片描述
CPU和cache之间进行数据/指令存取,而内存(主存)和高速缓存则通过系统总线来实现通信。程序员编写的程序以及数据被加载到内存中后,随后被加载到高速缓存,CPU执行完指令处理完数据将结果写回高速缓存中,最后高速缓存再写回内存。

然而,由于CPU的运算速度不断提升,很快超越了一级缓存的数据 I\O 能力,CPU厂商们又开始引入了多级的缓存结构。多核的CPU至少拥有着不止一个一级缓存,当高速缓存中拷贝了内存中同一个数据多个副本时,CPU操作的是每一个副本,而如何保证副本与副本之间,以及副本与主存的数据一致呢?
在这里插入图片描述

主要利用的是缓存一致性的原则。

II. 缓存一致性

MESI协议中的缓存状态

在这里插入图片描述
缓存行状态变化
在这里插入图片描述
在这里插入图片描述
原文链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值