C/C++教程

Cache和buffer的区别

本文主要是介绍Cache和buffer的区别,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

Cache 的存在原因是对资源调用的空间局部性,你现在在看一本数学书,那么极有可能你一会儿还要再去图书馆的数学书架上找同类型的书,所以你在图书馆找了一个离数学区很近的位置坐下,你微信和一些人聊天,聊的最多的那个往往在微信消息列表靠顶部的位置,因为聊的最多,很有可能你一会还要和她聊,你上午访问知乎,很有可能最近几天你都要访问,所以浏览器就把知乎网站的静态资源先缓存下来,下次访问无需再次下载,这是 Cache。

Buffer 的存在原因是生产者和消费者对资源的生产/效率速率不一致。比如你看视频,视频控件会先预加载几秒的视频资源到缓冲区,看视频的你是资源消费者,你消费视频的速率就是视频资源按照其时间速率正常播放,但是你下载视频的速率可能时快时慢。如果刚开始先预加载几秒资源缓冲区,就算有一两秒网络拥塞了,视频还能顺畅播放,如果网速给力,则会有更多的资源被下载进来,这时资源会越积越多,这时可能缓冲区满了,就暂时停止加载,等你的资源消费的缓冲区空出一部分了,再继续开始加载,这样虽然视频的下载速度是波动的,但是你看的视频是稳定等速率播放的。当你有资源要写入硬盘时,硬盘的最小写入大小往往是一个 block,一般是 4KB,但是你准备写入数据的时候,有可能是一大堆字符,所以这时,你要把数据写到内存里,就要先准备好 4KB 的数据,然后写 4KB,再准备 4KB 数据,而不是每次准备好了一个 byte 的数据,就要写到磁盘里,这时,你是生产者,磁盘是消费者,磁盘是每次 4KB 的速率消费数据,而你生产数据是字节流方式生产,这时就需要一个缓冲区,暂时存放那些还没攒够 4KB 的数据。网络连接过程中,内核中保持的 TCP 连接,因为网速和对面生产者的原因,可能会有大量数据写入 TCP 的缓冲区,一方面因为数据可能seq对不上,需要等待,另一方面是因为对应该 socket 的应用程序并不一定能及时地把这些数据取走(消费)

这篇关于Cache和buffer的区别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!