cache和buffer的存储结构不同。
缓冲区是一块内存,用于存储与外部存储器交换的数据。CPU 不能直接与外部存储器通信。对于外部存储器,读写速度要慢得多。缓冲区用于存储两个不同速度或不同优先级的设备之间的数据传输。因此,缓冲区可以减少进程间通信的等待时间。当存储速度较快的设备与存储速度较慢的设备通信时。为了从存储速度较慢的设备存储数据,系统会先将数据存储在缓冲区中,然后在存储速度较快的设备达到一定级别时再读取缓冲区数据。同时,存储速度更快的设备可以完成其他任务。
例如,二进制地形 (BT) 格式用于存储高程网格。BT下载需要较长时间挂机,电脑可能24小时连续运行,但是BT下载的数据是零散的,这也体现在硬盘写入上,因为硬盘是机械寻址设备。这种碎片化的写入会导致硬盘长期高负荷机械运动,导致硬盘过早老化和损坏。因此,新发布的BT软件将缓冲区的概念应用于内存。数据暂时写入缓冲区,最大到一定大小(512M),然后一次性写入硬盘。这种方法大大减少了硬盘的高负荷机械运动。
例如,如果您在线观看视频,视频播放器会在开始时将几秒钟的视频资源预加载到缓冲区中。您消耗视频的速率是视频资源的正常播放。在这种情况下,视频可以流畅播放。如果网速强,会下载更多的视频资源并积累,直到缓冲区满,暂时停止加载,等待部分缓冲区清空,重新开始加载。即使视频的下载速度波动,您观看的视频在播放速率方面也是稳定的。
例如,当您有资源写入硬盘时,硬盘的最小写入大小通常是一个块,通常为 4KB。所以,4KB的数据会先存入缓冲区,然后再写入硬盘,而不是每次都准备一个字节的数据。此时,磁盘以每次 4KB 的速率消耗数据。
在网络连接过程中,由于网络速度的原因,内核中维护的传输控制协议(TCP) 连接可能有大量数据写入 TCP 缓冲区。这是因为socket对应的应用程序可能无法及时消费数据。
缓存是介于 CPU 和内存之间的一种存储,通过考虑 CPU 和内存的读写速度,根据局部性原则分配数据来增加访问时间。例如,对于空间局部性,系统会将数据添加到内存块旁边的缓存中。对于时间局部性,将应用最不常用(LFU)来从缓存中删除数据。
读缓冲区和写缓冲区
读缓冲区的数据并不总是有效的,而是实时生成的。每当缓冲区已满或缓冲区被主动刷新时,都会触发读取。对于小数据,这样可以减少读取次数。对于大数据,这个读取的数据量是根据缓冲区大小进行归一化的。这意味着必须首先读取馈送到缓冲区的数据。这是一个明显的顺序访问功能。
写缓冲区是对应的读缓冲区。对于小数据写入,需要填满写缓冲区。对于大数据,大数据会被划分成缓冲区大小,分批写入。对于特定设备,一次写入 4K 是最有效的。将小数据累积到缓冲区中的4K,一次写入或将大数据分成4K为每个分片,多次写入。
各种缓冲技术
单缓冲