背景
缓存,可以说在计算机体系到处被用到。
- CPU有指令缓存,还有L1L2L3缓存;
- 磁盘为了提高性能也有缓存;
- 就拿web开发来说,也会将经常访问的内容放到离用户更近的服务器上。
为何缓存的使用如此普遍?这个问题的确值得深入探讨一下。
存储金字塔
首先要说的算存储金字塔,如下图所示
可以看到,从上往下,速度越慢,容量越大,相应的成本就越低。
如果成本允许的情况下,我们自然尽量采购金字塔顶端的设备,然而现实却是残酷的,我们没有那么多资源可以挥霍。
缓存的概念
在计算机体系中,缓存的概念其实是相对的。
- 寄存器是L1的缓存
- L1是L2的缓存
- CPU缓存是内存的缓存
- 内存是硬盘的缓存
CPU Cache hit & miss
我不说话,我只上图,能用图说清楚的,我就不说话。
这里顺便提以下CPU的提前预取?
为了利用空间局部性,同时也为了覆盖传输延迟,可以随机性地在数据被用到之前就将其取入缓存。这一技术称为预取(Prefetch)。本质上讲,加载整个缓存块其实即是一种预取。
大概就是,CPU会提前给你把数据取过来,如果取到的数据正好是你要用的数据,那么恭喜你,速度会很快。
阶梯延时
内存数据库
也是将热点数据放在内存中,相当于是把内存当作硬盘的缓存
硬盘自身的缓存
CDN
总结
- 可以看到,缓存命中的性能会比缓存miss高很多
- 合理利用缓存,将热点数据放在缓存中
- 缓存的概念很广泛,不仅仅是CPU缓存
本博客欢迎转发,但请保留原作者信息
github:codejuan
博客地址:http://blog.decbug.com/