因何而生
书接上回,《存储(二)—— 内存、SSD、磁盘》,上次提到,不同的存储介质之间的IO速度差异巨大,这样就会造成一个问题:数据在不同介质时间传输时,速度快的永远在等速度慢的,最终系统的数据处理速度被IO最慢的存储层”拖累“,面对每秒几千转的磁盘,上GHz的CPU唯有叹息。
怎么解决这种问题呢?
一个最直观的想法是:啥?不就是慢吗?直接都用最快的介质不就行了,磁盘慢,那就都用内存啊。
这种想法很简单,通常简单的想法都是有效的,但是,在当前时代,至少有以下几种理由说明属于这个想法的时代还没有来临。
- 内存并不是最快的,内存的速度和高速缓存、寄存器还是有很大差别。
- 内存掉电后数据不能保持。
- 内存、高速缓存、寄存器终究受体积的限制,你始终无法把几十块硬盘组成的磁盘阵列集成到你手边的笔记本里面。
- 瞅瞅各种存储设备的价格,然后再瞅瞅钱包里的硬币兄弟们。。。。
换个思路,想想食堂卖饭的窗口,每次人多而我又想吃饺子的时候,食堂阿姨总是一次煮一锅,煮完盛五盘,然后来一个,直接端走,再来一个,再端走。柜台上摆好的显然是比锅里煮的快的。
计算机似乎也可以这样,把要使用或者将要使用的数据,从速度慢的介质里面放到速度快的介质里面,一次”放一锅“,这样下次在有数据读取的需求时,就可以直接从速度快的介质用拿数据了。
而这部分提前准备着的数据,就是缓存了。
所以呢?缓存因何而生?缓存的出现是为了缓冲不同存储介质IO速度之间的天壤之别。
缓存金字塔
单从大多数程序员熟悉的应用层来看,缓存也许约等于从数据库或者文件中读出来放到内存或者redis等中的一些数据,但是如果我们把视野扩展到整个计算机系统中时,缓存又是个什么样子的呢?
神书CSAPP中有这样一张图:
我们大部分时间所做的,