计算机中存储数据的介质,由快到慢大致有
- 寄存器
- L1 Cache
- L2 Cache
- L3 Cache
- 内存
- SSD 固态硬盘
- 普通硬盘
计算机理论上处理信息的最高速度,是由晶振频率决定的。
晶振全程石英振荡器,它的振荡频率稳定。石英表,正是利用这一特性来工作的。
用一个我们可能更熟悉的词汇代替晶振频率,那就是时钟信号。如果一个CPU的时钟信号是1GHz,就代表着一个时钟信号的周期是1/(1G),即十亿分之一秒,1纳秒。
理想情况下,如果不做存储分级,所有数据都放到CPU里面,那CPU的能耗是非常大的,那散热就是个大问题。实际上,根据程序的局部性原理,我们没有必要把所有数据都放到昂贵的CPU里面。
我们按照使用频率将经常使用的数据放到离CPU进,读取速度快的存储中,将不经常使用的数据放到造价经济的存储中。于是形成了现在的分级存储或者说缓存。
-
Register 寄存器
寄存器在CPU内部,挨着控制单元和逻辑计算单元,一个32位寄存器通常可以存放4个字节,64位存8个字节。数量一般在几十个到上百个。
寄存器访问速度最快,一般只需要半个时钟周期。 -
Cache
我们在看CPU参数的时候,比如i7 有个参数,叫三级缓存,说着就是这个cache。一般现在的CPU Cache分三级,越快的离CPU越近。
L1 Cache 大小在几十k或者几百k,速度在2~4个时钟周期。
L2 Cache 大小在几百k或者几M,速度在10~20个时钟周期。
L3 Cache 大小在几M到几十兆,速度在20~60个时钟周期。 -
内存
内存的原材料是硅,它通过总线和CPU相连,大小这个我们最熟悉了,老一些有几百兆的,现在普遍都在2G,4G,8G,16G,有些服务器甚至达到T这个级别,速度在200~300个CPU周期之间。 -
SSD固态硬盘
SSD属于非易失性存储器,断电后数据还在,不会像内存和寄存器一样消失。内存比SSD要快10-1000倍。这样比较是不是感觉SSD很慢,其实这已经快多了。因为和机械硬盘比,内存要快百万倍。
我们再来总结一下不同存储的速度。
存储 | 大概耗时 |
---|---|
寄存器 | 1ns |
Cache | 50ns |
内存 | 100ns |
SSD | 100,000ns 1微妙 |
机械硬盘 | 100,000,000ns 百毫秒 |
访问
如果CPU想要访问一个数据时,它先会在寄存器中查找,如果找不到,那么就依次去L1 Cache、L2 Cache、L3 Cache、内存中查找,直到找到。
通常在L1中命中的概率为80%,三级缓存总和加起来,也就是说,缓存总的命中率大概在95%以上。没用命中,就是miss了,又称缓存穿透。
随着程序的运行,经常访问的数据可能会变更,那么缓存中的数据就需要变更替换,俗称缓存置换。经典的缓存置换算法有FIFO(先进先出)、LFU(最近最少使用算法)、LRU(最近最久未使用)等。