编者按
为什么要了解CPU内部缓存结构?只有了解了CPU内部缓存的结构,在程序开发的过程中遇到问题才能找到方向,特别是在并发编程开发中,所以我们有必要掌握CPU内部的缓存结构及其读写策略
一、CPU内部缓存结构图

CPU缓存结构
CPU缓存是由很多个缓存块(Cache Line)组成的。读取数据时,是以一小块一小块来读取的

使用CPU-Z工具查看CPU缓存情况

二、CPU缓存读写策略
读取策略
假如要加载一个 int array[100] 的数组,int需要占用 4 个字节,不足 Cache Line规定的64个字节大小,所以CPU会顺序加载数组元素 array[0] 到 array[15],从而保持64个字节对齐,也就是CPU读取数据是一次性加载64个字节的数据。
写入策略
有两种写入策略
1. 写直达(Write Through)
把数据同时写入缓存与内存中
优点:思路简单
缺点:无论数据是否在缓存中,每次写操作都会写入到内存,耗费时间从而影响性能

2. 写回(Write Back)
为了解决写直达的性能问题,提出了写回的策略
写回策略:发生写操作,新数据只会被写入CPU的缓存块中,只有当修改过的缓存块被替换时才需要写到内存中,从而减少了数据写回内存的频率,进而提高了系统的性能
执行过程分析:
-
如果发生写操作能够命中缓存,就把数据更新到缓存块,并将存储该数据的缓存块标记为脏的
-
如果发生写操作时,发现数据所在的缓存块存放的是别的内存地址的数据,此时就会检查这个缓存块里的数据是不是脏的
如果是脏的,就将该缓存块数据写回内存,然后将当前新数据写到该缓存块中
如果不是脏的,就直接将当前新数据写到该缓存块中,然后再将缓存块标记为脏的
优点:如果发现大量操作能够命中缓存,就不需要读取内存,直接从缓存中读取,从而提升了性能
