天天看点

系统设计基础知识(六)—缓存区

作者:喜欢编码的社畜

缓冲区的主要目的是进行流量整形,将大量的小规模I/O组织成稳定的少量大规模I/O,从而减少响应次数。换句话说,缓冲区用于平衡系统两端的处理速度。比如你不能用一点点数据写入硬盘,而是积累一定量的数据,一起写入一个块。

cache和buffer的存储结构不同。

系统设计基础知识(六)—缓存区

缓冲区是一块内存,用于存储与外部存储器交换的数据。CPU 不能直接与外部存储器通信。对于外部存储器,读写速度要慢得多。缓冲区用于存储两个不同速度或不同优先级的设备之间的数据传输。因此,缓冲区可以减少进程间通信的等待时间。当存储速度较快的设备与存储速度较慢的设备通信时。为了从存储速度较慢的设备存储数据,系统会先将数据存储在缓冲区中,然后在存储速度较快的设备达到一定级别时再读取缓冲区数据。同时,存储速度更快的设备可以完成其他任务。

例如,二进制地形 (BT) 格式用于存储高程网格。BT下载需要较长时间挂机,电脑可能24小时连续运行,但是BT下载的数据是零散的,这也体现在硬盘写入上,因为硬盘是机械寻址设备。这种碎片化的写入会导致硬盘长期高负荷机械运动,导致硬盘过早老化和损坏。因此,新发布的BT软件将缓冲区的概念应用于内存。数据暂时写入缓冲区,最大到一定大小(512M),然后一次性写入硬盘。这种方法大大减少了硬盘的高负荷机械运动。

例如,如果您在线观看视频,视频播放器会在开始时将几秒钟的视频资源预加载到缓冲区中。您消耗视频的速率是视频资源的正常播放。在这种情况下,视频可以流畅播放。如果网速强,会下载更多的视频资源并积累,直到缓冲区满,暂时停止加载,等待部分缓冲区清空,重新开始加载。即使视频的下载速度波动,您观看的视频在播放速率方面也是稳定的。

例如,当您有资源写入硬盘时,硬盘的最小写入大小通常是一个块,通常为 4KB。所以,4KB的数据会先存入缓冲区,然后再写入硬盘,而不是每次都准备一个字节的数据。此时,磁盘以每次 4KB 的速率消耗数据。

在网络连接过程中,由于网络速度的原因,内核中维护的传输控制协议(TCP) 连接可能有大量数据写入 TCP 缓冲区。这是因为socket对应的应用程序可能无法及时消费数据。

缓存是介于 CPU 和内存之间的一种存储,通过考虑 CPU 和内存的读写速度,根据局部性原则分配数据来增加访问时间。例如,对于空间局部性,系统会将数据添加到内存块旁边的缓存中。对于时间局部性,将应用最不常用(LFU)来从缓存中删除数据。

系统设计基础知识(六)—缓存区

读缓冲区和写缓冲区

系统设计基础知识(六)—缓存区

读缓冲区的数据并不总是有效的,而是实时生成的。每当缓冲区已满或缓冲区被主动刷新时,都会触发读取。对于小数据,这样可以减少读取次数。对于大数据,这个读取的数据量是根据缓冲区大小进行归一化的。这意味着必须首先读取馈送到缓冲区的数据。这是一个明显的顺序访问功能。

写缓冲区是对应的读缓冲区。对于小数据写入,需要填满写缓冲区。对于大数据,大数据会被划分成缓冲区大小,分批写入。对于特定设备,一次写入 4K 是最有效的。将小数据累积到缓冲区中的4K,一次写入或将大数据分成4K为每个分片,多次写入。

各种缓冲技术

单缓冲

系统设计基础知识(六)—缓存区
  • 仅使用一个缓冲区
  • 生产者将一个数据块生成到缓冲区中。消费者消耗缓冲区。一旦缓冲区再次为空,下一个数据块将被移动到缓冲区。
  • 大多数时候,连接总是使用缓冲区。
  • 单个缓冲区的目标是提供绝对 I/O 一致性,确保 I/O 性能,并尽可能减少内存使用量。

双缓冲

系统设计基础知识(六)—缓存区
  • 只使用了两个缓冲区
  • 生产者在缓冲区 1 中生成一个数据块。而消费者同时使用缓冲区 2。因此,无需等待填充缓冲区。当缓冲区 1 满时,将缓冲区 1 交换到缓冲区 2,消费者消费缓冲区 1 的数据。
  • 它也被称为缓冲区交换
  • 由于生产者和消费者不在同一个缓冲区上操作,它可以尽可能地减少锁定时间。在一小部分时间内,它们仍然可以在同一个缓冲区上操作
  • 然而,过程的复杂性增加了。如果进程执行 I/O 的快速突发,它可能是有缺陷的。

圆形缓冲器

系统设计基础知识(六)—缓存区
  • 仅当使用超过 2 个缓冲区时。
  • 缓冲区的集合可以称为循环缓冲区或环形缓冲区
  • 生产者只能在缓冲区 (i) 中的数据等待消费时填满缓冲区 (ni)
  • 根据维基百科的“循环缓冲区”,有缓冲区长度固定、先进先出、将元素移到缓冲区时其他元素的位置不变等3个特性。
  • 使用循环缓冲区而不是双缓冲将提高数据传输率。它适用于执行快速 I/O 突发的进程。
系统设计基础知识(六)—缓存区

如果你发现我的任何文章有帮助或有用,麻烦点赞或者转发。 谢谢!

继续阅读