类⽐我们开发⽹站后台系统使⽤的缓存(⽐如 Redis)是为了解决程序处理速度和访问常规关系型数据库速度不对等的问题。CPU 缓存则是为了解决 CPU 处理速度和内存处理速度不对等的问题。
我们甚⾄可以把内存可以看作外存的⾼速缓存,程序运⾏的时候我们把外存的数据复制到内存,由于内存的处理速度远远⾼于外存,这样提⾼了处理速度。
总结:CPU Cache 缓存的是内存数据⽤于解决 CPU 处理速度和内存不匹配的问题,内存缓存的是硬盘数据⽤于解决硬盘访问速度过慢的问题。
为了更好地理解,我画了⼀个简单的 CPU Cache 示意图如下(实际上,现代的 CPU Cache 通常分为三层,分别叫 L1、L2、L3 Cache):
CPU Cache 的⼯作⽅式:
先复制⼀份数据到 CPU Cache 中,当 CPU 需要⽤到的时候就可以直接从 CPU Cache 中读取数据,当运算完成后,再将运算得到的数据写回 Main Memory 中。但是,这样存在内存缓存不⼀致性的问题!⽐如我执⾏⼀个 i++ 操作的话,如果两个线程同时执⾏的话,假设两个线程从 CPU Cache 中读取的 i=1,两个线程做了 1++ 运算完之后再写回 Main Memory 之后 i=2,⽽正确结果应该是 i=3。
CPU 为了解决内存缓存不⼀致性问题可以通过制定缓存⼀致协议或者其他⼿段来解决。
留言