计算机程序的本质是指令的执行过程
, 也就是处理器的寄存器(Register)从内存load
数据,然后store
回内存的过程。
---------------------------------------------------ref 理解CPU的Load和Store操作
[Q&A] 为何引入CPU Cache模型
在计算机中,所有的运算操作都是由CPU的寄存器来完成的,CPU指令的执行过程需要涉及数据的读取和写入操作,CPU所能访问的所有数据只能是计算机的主存(通常是指RAM),虽然CPU的发展频率
不断地得到提升,但受制于制造工艺以及成本等的限制,计算机的内存反倒在访问速度上并没有多大的突破,因此CPU的处理速度和内存的访问速度之间的差距越拉越大,通常这种差距可以达到上千倍,极端情况下甚至会在上万倍
以上。由于两边速度严重的不对等,通过传统FSB直连
内存的访问方式很明显会导致CPU资源受到大量的限制,降低CPU整体的吞吐量
,于是就有了在CPU和主内存之间增加缓存的设计。
一句话:CPU吞吐量太低了,为了提高CPU吞吐量
CPU Cache模型
CPU和主内存之间的缓存的数量都可以增加到3级了,最靠近CPU的缓存称为L1,然后依次是L2,L3和主内存,CPU缓存模型如下图所示。
Cache的出现是为了解决CPU直接访问内存效率
低下问题的,程序在运行的过程中,会将运算所需要的数据从主存复制一份到CPU Cache中,这样CPU进行计算时就可以直接对CPU Cache中的数据进行读取和写入,当运算结束之后,再将CPU Cache中的最新数据刷新到主内存当中 ,CPU通过直接访问Cache的方式替代直接访问主存的方式极大地提高了CPU的吞吐能力
,有了CPU Cache之后,整体的CPU和主内存之间交互的架构大致如下图所示。
[Q&A] 引入缓存的效果
Cache与主内存访问速度对比图
-----------------------------------------------------------------------------书名:Java高并发编程详解:多线程与架构设计 作者:汪文君
程序的指令,如果需要从CPU Register里面取数据,CPU只需要0 cycles
(CPU周期)。如果需要直接访问内存,则需要几百个cycles
。如果能从高速缓存取到目标数据,需要4-75个cycles
。
-----------------------------------------------------------------------------ref cpu运行速度分析——延迟与数据吞吐量 - 知乎
[Q&A] CPU缓存一致性问题
由于CPU缓存的出现,很好地解决了处理器与内存速度之间的矛盾,极大地提高了CPU的吞吐能力,但是也为计算机系统带来更高的复杂度,它引入了一个新的问题: 缓存一致性(Cache Coherence) 。
Further Reading :CPU缓存一致性问题
-----------------------------------------------------------------------------书名:Java高并发编程详解:多线程与架构设计 作者:汪文君