Cache

  • 高速缓存。
  • 我们知道各种硬件存在制作工艺上的差别,所以当两种硬件需要交互时,肯定会存在速度上的差异,而且只有交互双方都完成了这一步才能同时解放去处理其他书屋。
  • 假如现在有A、B两个设备,A用来交互的接口速度是1000M/s,B是500M/s,那么以下两种情况:
  1. A从B取一个1000M的文件原本需要1s,实际却需要2s,额外的1s是等待B把剩余的500M找出来,而这1s的空闲时间除了等待干不了其他事情。
  2. A给B1000M文件也需要2s,本来也只需要1s,但B 1s内只能拿500M,剩下的500M还得等下一个1sB来取,等待的这1s也是不能干别的事。
  • 解决的办法就是在A和B之间加一层区域ab,它提供了两个接口,a接口的速率接近A,b接口则接近B,然后我们把ab的a和A相连,b和B相连,让A、B把文件通过ab传给对方:
  • A要从B中取1000M文件,它把需求告诉了ab,接下来ab通过b和B进行文件传送,对于第一次传送ab并没起什么作用,但第一次之后ab就背着B偷偷缓存了一个一模一样的文件,而且只要从B取东西,ab都会缓存一个副本下来,下次谁来取都直接把该副本通过a接口给它,由于a的速率相对接近A,所以A觉得节省了时间。说白了ab就是提供了缓存能力,即cache。ab会定期清cache以保证提供的东西是最新的。例如,CPU读取内存数据时,一般都是经过内存的一部分作为缓存来增加系统的读取性能。
  • A要给B发个1000M的文件,它通过a接口给了ab。站在A的角度上好像它认为已经交到B手上了,但其实ab并不先交给B,而是先缓存下来,等到系统空闲或buffer满了再通过b接口慢慢给B,这样A就不用等了。此时,ab提供的就是缓冲的能力,即Buffer。它存在的目的就是适用于速度快的往速度慢的输出东西,例如,内存的数据要写到磁盘,CPU寄存器里的数据写到内存。