循环缓冲区的一些用途是什么?
使用循环缓冲区的好处是什么?
它是否可以替代双向链表?
循环缓冲区的一些用途是什么?
使用循环缓冲区的好处是什么?
它是否可以替代双向链表?
我曾将它用作限制大小的内存日志。例如,应用程序会在处理用户请求时写入日志条目。每当出现(可能会破坏处理过程的)异常时,当前在内存中的日志记录将被倾倒。
循环缓冲区的好处是,你不需要无限量的内存,因为旧条目会自动被覆盖。 "挑战" 在于,你需要找到适合你用例的合适大小。在上面的例子中,如果最重要的关于异常的日志记录已经被覆盖,那就非常不幸了。
一些系统/应用程序有工具让你按需提取缓冲区的当前内容,而不仅仅是在自动提取(如果有的话)时。
我认为ETW和CLR的stress log在许多其他系统的内核或高性能跟踪/日志记录中都是这样实现的。
实际上,使用此类缓冲区进行内存跟踪/日志记录的概念相当常见(不只是这种用途-当然不是),因为它比将记录写入你可能永远不会感兴趣的文件/数据库要快得多。相关说明,它节省了硬盘空间。
http://en.wikipedia.org/wiki/Circular_buffer
循环缓冲区、循环缓存或环形缓冲区是一种数据结构,它使用一个单一的固定大小缓冲区,就好像它是端对端连接的一样。这种结构非常适合于缓冲数据流。我将其用作实现轮询调度的简单方法。基本上,我有一堆不同的对象,可以产生一个值,消费者可以处理该值。我把所有的生产者都放在一个环中,依次询问每个生产者。
我认为最重要的答案是:“当你想按创建顺序顺序读取生成的数据,并且不关心除了最后接收到的第n个数据之外的旧数据时,需要考虑内存敏感任务。”