存储器层次结构
指令周期:取出一条指令并这条指令总共需要的时间,指令周期通常由若干个CPU周期(机器周期或者时钟周期)数来表示。
CPU读取寄存器1次只需要1个时钟周期,读取内存1次需要400个时钟周期,读取硬盘1次需要1千万个时钟周期
cpu运行程序时避免直接从硬盘读取数据,即使要读取也不能傻等着数据返回,而是去运行别的程序,让数据读进去后通知CPU数据到达了,这就引出了异步编程和并发编程
(1) 被读取过的数据在短时间内会被再次读取
(2) 被读取过的数据的邻近数据在短时间内会被再次读取
分别是时间局部性原理和空间局部性原理,根据这两个规则的局部性原理,引出了缓存的概念。在寄存器与内存中引入了3个层级的高速缓存区,读取速度分别在5-20个时钟周期,且容量依次增加,每次CPU读数据都是读取1块,然后把一整块数据缓存到高速缓存区中,下次要读的数据如果在这1块中则大大减少了数据读取时间。
上一层次结构利用局部性原理缓存来自下一层次的数据,mybatis持久层缓存、redis缓存、浏览器缓存、数据库预编译sql缓存、nginx静态文件缓存皆是此道理。