环形(循环)缓冲区和队列之间有什么区别?两者都支持FIFO,所以在什么情况下我应该在队列上使用环形缓冲区,以及为什么?
与Hadoop的相关性
map阶段使用环缓冲区来存储中间密钥值对。在队列中选择这种选择的原因是什么?
发布于 2016-02-02 04:41:46
A RingBuffer是一个数组,用作队列
它将分别保持读和写的位置。当它到达Array的末尾时,它将从Array开始继续。
RingBuffer在队列上的使用。
有关更多细节,请看雅各布·詹科夫的文章。
请看一下与SE有关的问题:
发布于 2014-06-09 17:14:56
队列是一种抽象数据类型,支持操作、队列和脱队列。环形缓冲区是队列的一种可能实现,尽管它不是唯一的实现(例如,可以使用链接列表实现队列)。换句话说,队列是可以支持FIFO插入的数据结构的通用术语,而环形缓冲区是实现队列的一种可能的数据结构。
希望这能有所帮助!
发布于 2019-01-31 18:41:32
这2在实现上非常相似,但它们在用法上的细微差别可能使它们看起来很不一样。以下是简短的答案:
循环:可以读取缓冲区中的中间值,就像“最近历史缓冲区”一样
Fifo:只有最老的才能被读取(并且通常在读取时被删除)
长答案
环形缓冲器有一个指针,当指针到达终点时,指针就会向前移动和环绕。这样,当数据自然过时时,数据就会被覆盖。如果您需要保存最后的N个样本,这是非常有用的。示例用法:
FIFO或队列(两者都是相同的),通常被实现为一个环形缓冲区(templatety胡枝子的答案是正确的,它可以是一个链接列表)。与环形缓冲区相反,将有2个指针;一个用于读,另一个用于写入。就像环形缓冲区指针一样,任何一个指针都会在增量时绕到物理缓冲区的开头;这就产生了连续缓冲区的错觉。注意,它被认为是写入指针追赶读指针的错误。示例用法:
https://stackoverflow.com/questions/23111496
复制相似问题