关于缓存那点事
这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战
引言:了解计算机的存储结构有利于我们更好的编写良好的程序,今天我们就来说说计算机中的缓存。
1.什么是缓存?
缓存就是数据交换的缓冲区,是存储数据的临时地方,一般用来存储经常会用到的数据。
2.为什么要用缓存?
计算机cpu访问性能远远高于内存的访问性能,大概一次内存访问大约需要120个CPU 周期,也就是说cpu和内存的性能已经有120倍的差距了,这就会导致内存在处理数据的时候cpu只能傻傻的等待,基于这个情况就有了高速缓存机制。
存储器系统是一个具有不同容量、成本和访问时间的存储设备的层级结构。靠近cpu的小的、快速的高速缓存存储器是内存上一部分数据和指令的缓冲区域。主存缓存磁盘上的数据,而这些磁盘又常常作为存储在通过网络连接的其他机器的磁盘或磁盘上的数据的缓冲区域。
其结构如下:
存储器的层次结构的主要思想是上一层的存储器作为第一层存储器的高速缓存。因此寄存器文件就是L1的高速缓存。在分布式系统中本地磁盘就是存储在其他系统中磁盘上的数据的高速缓存。
3.缓存存放数据的两种假设
缓存上存储的数据是计算机认为之后可能要访问到的数据,其判断哪些数据可能要被访问到主要通过以下两种假设:
时间局部性:时间局部性假设目前访问的数据在接下来也更有可能再次被访问到,所以计算机会把刚刚访问过的数据放入缓存中(产生时间局部性的典型原因,是因为在程序中存在着大量的循环操作)。
空间局部性:空间局部性假设与目前访问的数据的相邻数据在接下来也更有可能被访问到,所以会把当前数据周围的数据放入缓存中(这个是因为指令通常是顺序存放、顺序执行的,数据也一般以向量、数组、表等形式存储的)。
一份良好的代码往往符合时间局部性和空间局部性。