首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >环形缓冲区与队列之间的差异

环形缓冲区与队列之间的差异
EN

Stack Overflow用户
提问于 2014-04-16 13:53:06
回答 4查看 17.2K关注 0票数 9

环形(循环)缓冲区和队列之间有什么区别?两者都支持FIFO,所以在什么情况下我应该在队列上使用环形缓冲区,以及为什么?

与Hadoop的相关性

map阶段使用环缓冲区来存储中间密钥值对。在队列中选择这种选择的原因是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-02-02 04:41:46

A RingBuffer是一个数组,用作队列

它将分别保持读和写的位置。当它到达Array的末尾时,它将从Array开始继续。

RingBuffer在队列上的使用。

  1. 环形缓冲器速度很快。
  2. 当需要存储多少数据时,RingBuffer是有用的。

有关更多细节,请看雅各布·詹科夫的文章

请看一下与SE有关的问题:

Java -环缓冲器

票数 9
EN

Stack Overflow用户

发布于 2014-06-09 17:14:56

队列是一种抽象数据类型,支持操作、队列和脱队列。环形缓冲区是队列的一种可能实现,尽管它不是唯一的实现(例如,可以使用链接列表实现队列)。换句话说,队列是可以支持FIFO插入的数据结构的通用术语,而环形缓冲区是实现队列的一种可能的数据结构。

希望这能有所帮助!

票数 6
EN

Stack Overflow用户

发布于 2019-01-31 18:41:32

这2在实现上非常相似,但它们在用法上的细微差别可能使它们看起来很不一样。以下是简短的答案:

循环:可以读取缓冲区中的中间值,就像“最近历史缓冲区”一样

Fifo:只有最老的才能被读取(并且通常在读取时被删除)

长答案

环形缓冲器有一个指针,当指针到达终点时,指针就会向前移动和环绕。这样,当数据自然过时时,数据就会被覆盖。如果您需要保存最后的N个样本,这是非常有用的。示例用法:

  • FIR实现,您将在其中使用最新的N个示例。当新的数据点进入时,FIR将在最近的N个数据点上运行。
  • 在发生特定事件时捕获最后N个数据点(如破折号摄像机,如果检测到事件,则自动保存最后5秒的视频)

FIFO或队列(两者都是相同的),通常被实现为一个环形缓冲区(templatety胡枝子的答案是正确的,它可以是一个链接列表)。与环形缓冲区相反,将有2个指针;一个用于读,另一个用于写入。就像环形缓冲区指针一样,任何一个指针都会在增量时绕到物理缓冲区的开头;这就产生了连续缓冲区的错觉。注意,它被认为是写入指针追赶读指针的错误。示例用法:

  • 一个实体正在生成数据,另一个实体正在处理数据,但是处理不能在时间或与数据生产者同时进行。就像邮局的阵容一样。
  • 从一个系统发送到另一个系统的消息。秩序是重要的,不应该失去。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23111496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档