缓存和缓冲区有什么区别?


Answers:


11

来自维基百科关于数据缓冲的文章:

缓冲区是物理内存存储区域,用于在数据从一个位置移动到另一个位置时临时保存数据

缓冲器结束通过循环和容纳从一个存储位置传送到另一数据的每个单件(例如使用在音频处理循环缓冲器时)。缓冲区只允许 - 数据流中当前位置之前和之后的数据“缓冲区”。

实际上,缓冲区和缓存有一些共同的方面。然而,高速缓存在传统意义上通常不会没有当它被从一个地方移动到另一个地方(即CPU高速缓存)存储的所有数据。

缓存的目的是以透明的方式存储数据,以便缓存足够的数据,以便可以传输剩余的数据而不会有任何性能损失。在此上下文中,缓存仅“预取”少量数据(取决于传输速率,缓存大小等...)。

主要区别在于缓冲区最终会保存所有数据。相反,缓存可能包含全部,部分或全部数据(取决于设计)。但是,访问缓存就好像您首先直接访问数据一样 - 缓存的确切内容对缓存的“用户”是透明的。


不同之处在于界面。当您使用缓存访问数据源时,您使用它就像缓存数据源一样 - 您可以通过缓存访问数据源的每个部分,缓存将确定数据来自何处(缓存本身或源代码)。缓存本身确定要预加载的数据的哪些部分(通常只是开头,但有时是全部),而使用中的缓存替换算法确定从缓存中删除内容的时间/时间。最好的例子是除了CPU缓存本身之外的系统是prefetcher / readahead。两者都将他们认为您将最常用的数据部分加载到内存中,如果没有缓存某些内容,则还原到硬盘驱动器。

相反,缓冲区不能用于在数据流中即时移动您的位置,除非新部件已经移动到缓冲区。为此,需要缓冲区重新定位(假设新位置超出缓冲区长度),实际上需要您从新位置“重新启动”缓冲区。最好的例子是在Youtube视频中移动滑块。

缓冲区的另一个好例子是在Winamp中播放音频。由于音频文件需要由CPU解码,因此从读入歌曲到处理音频到将声音发送到声卡之间需要一些时间。Winamp将缓冲一些音频数据,因此已经处理了足够的音频数据以避免任何“锁定”(即CPU总是准备你将在几百毫秒内听到的音频,它永远不会是实时的;你听到的是来自缓冲区,这是CPU过去准备的)。


我认为,如果视频已经完全缓冲,即下载到您的设备,那么在Youtube的示例中,它只是缓存而且每次移动幻灯片时都不必寻找新位置,除非您刷新页面或重新加载视频。这是对的吗?
PeanutsMonkey

@PeanutsMonkey正确,Youtube视频在缓冲时直接下载到浏览器的缓存中。在这种情况下,缓冲区只是一个高级术语,因为您始终查看当前位于缓存中的内容。当视频被缓冲时,它被移动到缓存(它们共享相同的物理位置)。我在音频播放器的上下文中用另一个缓冲区示例更新了答案。
突破2012年

2
tl; dr版本:如果你想尽快从中获取数据,它就是一个缓冲区。如果你想尽可能长时间地保存数据,它就是一个缓存。
David Schwartz

10

更确切地说,缓存是缓冲区的特定使用模式,这意味着对相同数据的多次使用。大多数“缓冲区”的使用意味着在一次使用后数据将被耗尽或丢弃(尽管不一定是这种情况),而“缓存”意味着数据将被重复使用多次。高速缓存通常也意味着数据在被同时使用时被存储,尽管不一定是这种情况(如在预取等中),而缓冲意味着数据被存储起来供以后使用。

但是,在实现和使用方面肯定存在很大的重叠。


3

缓存和缓冲区之间的一个重要区别是:

缓冲区是主存储器的一部分。它们是存在并从主存储器(RAM)访问的结构。

另一方面,缓存是计算机内存层次结构中的单独物理内存。

缓冲区有时也称为 - 缓冲区缓存。这个名称强调缓冲区的使用类似于缓存,即存储数据。而差异在于其使用的背景。

缓冲区用于临时存储数据,而数据则从一个对象移动到另一个对象。EX:当视频从Internet移动到我们的PC上时,显示缓冲区用于存储下一个显示的视频帧。(这会增加QoS,因为视频在成功的缓冲过程之后会顺利运行。)EX:另一个例子是我们将数据写入文件时的情况。新写入的数据不会立即复制到辅助存储器。所做的更改存储在缓冲区中,然后根据设计的策略,更改将反映回辅助存储器(硬盘)中的文件。

另一方面,在主存储器和处理器之间使用高速缓存,以弥合RAM和处理器的执行速度之间的差距。此外,最常访问的数据存储在缓存中以减少对RAM的访问。


-1你写“缓存是一个单独的物理内存”<---否。不一定。IE将缓存存储在HDD上,毫无疑问将其加载到RAM stackoverflow.com/questions/854412 / ... 我不认为C代码可以指定将其加载到称为缓存的物理内存中。放入缓存的内容更多的是低级别的东西,也许只有操作系统可以指定。但它仍然被称为缓存,即使它在RAM中。并且Web服务器squid可以设置一个缓存,没有理由认为所有这些都在物理缓存中或者需要。
barlop 2015年

缓存是一个函数,它不必在特殊的内存中
barlop 2015年

1

常见的事情:两者都是计算和“主”存储之间的中间数据存储组件(软件或硬件)。

对我来说,区别在于:

缓冲:

  • 处理对数据的顺序访问(例如,从文件或套接字读取/写入数据)
  • 启用计算和主存储之间的接口,使数据生成器和数据使用者的不同数据传输模式相互适应。例如,计算会写入少量数据,但磁盘驱动器只能接受特定大小的数据。因此缓冲区会累积小块作为输入,并将它们重新组合成更大的输出部分。
  • 所以它就像一个适配器设计模式。它加入了两个无法直接互操作的交互组件。
  • 示例:磁盘缓冲区,Java语言的BufferedReader,计算机图形学中的duffering。

缓存:

  • 处理对数据的随机访问(例如,CPU缓存缓存按顺序排列非必要的内存行)。
  • 优化对主存储的访问,使其更快。例如,CPU缓存避免访问内存,从而使CPU命令更快。
  • 它就像一个装饰设计模式。它加入(通常是透明的)两个相互作用的组件,原则上可以直接互操作,但它可以使交互更快。
  • 示例:CPU缓存,页面缓存,Web代理,浏览器缓存。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.