我们都知道机械硬盘的速度很慢,内存的速度很快,那么不同存储器之间的差距到底有多大呢?
我们先来看一幅图:
CPU访问寄存器的时间是0.3纳秒,访问L1高速缓存的时间是1纳秒,访问L2高速缓存的时间是4纳秒...
秒、毫秒、微妙、纳秒的计算公式如下:
1s(秒) = 1000 ms(毫秒) = 1000 000 μs(微秒) = 1000 000 000 ns(纳秒)
我们单单这样看可能没什么感觉,我把上面的参数都摘录下来,为了更直观的比较,我把0.3纳秒放大成1秒,其他数据同比例放大,对比一下:
类型 | 容量 | 访问时间 | 相对时间 |
---|---|---|---|
寄存器 | 1k | 0.3ns | 1秒 |
L1高速缓存 | 32K | 1ns | 3秒 |
L2高速缓存 | 256k | 4ns | 12秒 |
L3高速缓存 | 8M | 40ns | 2分钟 |
内存 | 16G | 100ns | 5分钟 |
固态硬盘 | 1T | 100μs | 3.5天 |
机械硬盘 | 1T | 10ms | 1年 |
网络(北京到上海) | - | 30ms | 3年 |
在各种存储器操作的耗时被量化之后,我们就有了很直观的感觉。
下面我们切换到人类的视觉来比较一下:
CPU访问寄存器和高速缓存,基本都是几秒钟,最多两分钟就够了,如果访问内存的话需要5分钟,这都算比较快的速度了。
如果CPU要访问硬盘就很慢了,CUP访问固体硬盘(SSD)需要3.5天时间,如果访问机械硬盘,就需要1年的时间。
最慢的是网络,从北京到上海需要3年,如果距离再远点,那就更慢了...
这和我们的体感就对应上了,平时我们打开一个文件的时候感觉很慢,就是因为在读机械硬盘(固态硬盘就快多了),最慢的是打开网页,半天才刷出来。
你可能会问:既然高速缓存那么快,那我们把所有的存储器都换成高速缓存不就行了吗?
答案是不行,有以下几个原因:
- 成本: 高速缓存是一种非常昂贵的存储器,其制造成本远高于其他存储器类型,所以将所有存储器都设计成高速缓存会显著增加整个系统的成本。
- 容量: 高速缓存的容量通常较小,如果把所有的存储器都换成高速缓存,就存不下这么多数据了。
- 特性: 也是最重要的一点,高速缓存是一种易失性存储器,存储的内容在断电时会丢失,如果要长期保存数据,还是要保存到硬盘中。
存储器的层次关系是这样的:
(图片来源:https://xiaolincoding.com/os/1_hardware/storage.html#cpu-cache)
存储器层次结构是为了在性能、容量和成本之间取得平衡,存储容量越大,速度就越慢,成本也就越低,价格就越便宜。