今天面试被问到了有关Cache和Buffer的问题,回答的不是很好,很多问题是流于表象的。面试官给我问了两个最核心的问题“他们都是用于解决什么问题的”,我只了解应用场景却没办法总结出来一个核心问题,还是对这两个概念停留在比较浅的理解上,于是总结了一下网上的部分资料,对这两个概念有了比较深的认识。

  1. 什么是 Cache?

    Cache 是高速缓存。

  2. Cache 解决问题的原理?

    数据的时间局部性和空间局部性。

  3. Cache 用来解决什么问题?

    解决高速 CPU 和相对低速主存的速度瓶颈而设计的。Cache 的存在,是因为寄存器和 DDR 之间速度差异太大,DDR 的速度远不能满足寄存器的需要(不能满足 CPU 的需要,所以没有 Cache 会拉低整个系统的整体速度)

  4. 什么时候用不到 Cache?

    假定以后存储器访问变得跟CPU做计算一样快,Cache 就可以消失。

  5. 什么是 Buffer?

    缓冲区,用于存储速度不同步的设备或优先级不同的设备之间传输数据,通过 Buffer 可以减少进程间通信需要等待的时间,当存储速度快的设备与存储速度慢的设备进行通信时,存储快的设备先把数据缓存到 Buffer 上,等到系统统一把 Buffer 上的数据写到速度慢的设备上。常见的有把内存的数据往磁盘上进行写的操作。

  6. Buffer 用来解决什么问题?

    Buffer 的主要目的进行流量整形,把突发的大数量较小规模的 I/O 整理成平稳的小数量较大规模的 I/O,以减少响应次数。

  7. Cache 和 Buffer 的区别?

    Cache 是把最常用的工具放在手边,Buffer 是你家的垃圾桶,你平时的垃圾先扔在垃圾桶里,等垃圾桶满了再扔垃圾。

    Buffer并非用于提高性能,而Cache的目的则是提高性能。

    一个用于稳定流量,一个用于提高性能。

     

    大部分场景中,Buffer是特指内存中临时存放的IO设备数据——包括读取和写入;而Cache的用处很多——很多IO设备(例如硬盘、RAID卡)上都有Cache,CPU内部也有Cache,浏览器也有Cache。

    Buffer占用的内存不能回收,如果被强行回收会出现IO错误。Cache占用的内存,除实现Buffer的部分外都可以回收,代价则是下一次读取需要从数据的原始位置(通常是性能更低的设备)读取。

  8. Cache 和 Buffer 的共同点?

    Buffer 和 Cache 都是为了解决互访的两种设备存在速率差异,使磁盘的 IO 的读写性能或Cpu 更加高效,减少进程间通信等待的时间。


总结:问题的核心永远是“为什么这么做”,用这种方法学习来理解计算机学科问题中的一些解决思想会更通顺好懂。比如面试时有被问到“当磁盘读写足够慢的时候,还有 Buffer 存在的必要吗?”就像是缓冲一个视频,网络下载是很慢的,此时的缓冲区就无法起到缓冲的作用,因为 Buffer 只能做到一个流量整形(如保证视频一直有加载不会卡顿、减少 I/O 次数),而不能改变硬件本身的性质(比如网络速度、硬盘读写速度)。

 


0 条评论

发表评论

Avatar placeholder