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

Dha*_*ran 15 cache buffer

是说缓存是一种特殊的缓冲区吗?它们都执行相似的功能,但是我缺少一些潜在的区别吗?

Bre*_*ugh 15

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

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

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

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

缓存的目的是以透明的方式存储数据,以便缓存足够的数据,以便可以传输剩余的数据而不会造成任何性能损失。在这种情况下,缓存仅“预取”少量数据(取决于传输速率、缓存大小等)。

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


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

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

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

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

flu*_*ffy 10

更准确地说,缓存是缓冲区的特定使用模式,这意味着对相同数据的多次使用。“缓冲区”的大多数用法意味着数据将在一次使用后被排出或丢弃(尽管不一定如此),而“缓存”意味着数据将被多次重用。缓存通常还意味着数据被存储,因为它也被同时使用,尽管情况并非一定如此(如在预取等中),而缓冲意味着数据被存储起来以备后用。

然而,在实现和使用方面肯定有很大的重叠。