- 仅使用一个缓冲区
- 生产者将一个数据块生成到缓冲区中。消费者消耗缓冲区。一旦缓冲区再次为空,下一个数据块将被移动到缓冲区。
- 大多数时候,连接总是使用缓冲区。
- 单个缓冲区的目标是提供绝对 I/O 一致性,确保 I/O 性能,并尽可能减少内存使用量。
双缓冲
- 只使用了两个缓冲区
- 生产者在缓冲区 1 中生成一个数据块。而消费者同时使用缓冲区 2。因此,无需等待填充缓冲区。当缓冲区 1 满时,将缓冲区 1 交换到缓冲区 2,消费者消费缓冲区 1 的数据。
- 它也被称为缓冲区交换
- 由于生产者和消费者不在同一个缓冲区上操作,它可以尽可能地减少锁定时间。在一小部分时间内,它们仍然可以在同一个缓冲区上操作
- 然而,过程的复杂性增加了。如果进程执行 I/O 的快速突发,它可能是有缺陷的。
圆形缓冲器
- 仅当使用超过 2 个缓冲区时。
- 缓冲区的集合可以称为循环缓冲区或环形缓冲区
- 生产者只能在缓冲区 (i) 中的数据等待消费时填满缓冲区 (ni)
- 根据维基百科的“循环缓冲区”,有缓冲区长度固定、先进先出、将元素移到缓冲区时其他元素的位置不变等3个特性。
- 使用循环缓冲区而不是双缓冲将提高数据传输率。它适用于执行快速 I/O 突发的进程。
如果你发现我的任何文章有帮助或有用,麻烦点赞或者转发。 谢谢!