缓冲区是什么意思?


150

我到处都看到“缓冲”这个词,但是我无法理解它的确切含义。

  1. 有人能解释一下外行语言的缓冲是什么吗?
  2. 什么时候使用?
  3. 如何使用?

我注意到,“缓冲区”的名称略有不同,并且它们倾向于根据确切的物理内存以及保存的内容而变化。像“图形缓冲区”一样,它是视频内存的char数组,而“网络缓冲区”可能位于普通的RAM中。我不确定这是标准事件还是偶然事件。与Ailayna的答案差不多。
斯蒂芬·J

Answers:


267

想象一下,您正在从一碗里吃糖果。您定期吃一块。为了防止碗快用完,有人可能会在碗变空之前重新装满它,这样当您想再拿一块时,碗中就会有糖果。

碗在您和糖果袋之间起缓冲作用。

如果您正在在线观看电影,则Web服务将在接下来的5分钟左右的时间内将其连续下载到缓冲区中,这样您的计算机就不必在观看电影时下载电影(这会导致挂起)。


93
+1:当生产者和消费者以不同速率运行时,需要缓冲区。糖果是大批量生产的,但消费量较小-从制造商到口头的整个供应链都是一系列缓冲。
S.Lott,2009年

30
有史以来最好的比喻。让我渴望吃糖
凯尔·梅西

这里的Web服务是什么?缓冲区在哪里?Web服务是电影主机吗?
Jwan622 '16

坚实的定义。我想这就是为什么我们说视频在冻结时正在缓冲,而在我们看电影时却显示进度条
Red M

这是如此好,可行且简单。
JonasGrønbek

93

术语“缓冲区”是一个非常通用的术语,并不特定于IT或CS。在这里,可以暂时存储一些东西,以减轻输入速度和输出速度之间的差异。当生产者比消费者快时,生产者可以继续将输出存储在缓冲区中。当使用者加速时,它可以从缓冲区读取。缓冲区位于中间以弥合间隙。


如果您在http://en.wiktionary.org/wiki/buffer上平均定义,我想您会明白的。

要证明我们确实确实“每天都要下雪才能上学去走10英里”,请参阅书签11-24中的TOPS-10监控器呼叫手册第1卷,第11.9节“使用缓冲的I / O”。如果您梦night以求,请不要阅读。


1
+1我更喜欢这个解释。尽管我非常喜欢糖果,但糖果碗的例子有点像IMO。
Outlaw程序员,2009年

10
是的,“一个临时存储一些东西,以减轻输入速度和输出速度之间差异的地方”可以完美地总结出来。
黑猩猩

1
谢谢您的简单解释。但是,随附的PDF网址已失效
hassan

20

缓冲区只是用于存储数据的一块内存。从最一般的意义上讲,它通常是在一个操作中加载一个单一的内存块,然后在一个或多个Perchik的“糖果碗”示例中将其清空。例如,在C程序中,您可能具有:

#define BUFSIZE 1024
char buffer[BUFSIZE];
size_t len = ;

// ... later
while((len=read(STDIN, &buffer, BUFSIZE)) > 0)
    write(STDOUT, buffer, len);

...这是cp(1)的最低版本。这里,缓冲区数组用于存储read(2)读取的数据,直到写入为止;然后重新使用该缓冲区。

使用了更复杂的缓冲区方案,例如循环缓冲区,其中使用了一定数量的缓冲区,一个接一个,另一个接一个;一旦缓冲区已满,索引将“环绕”,以便第一个重新使用。


11

缓冲区表示“临时存储”。缓冲区在计算中很重要,因为相互连接的设备和系统很少彼此“同步”,因此,当信息从一个系统发送到另一个系统时,它就需要等待接收系统准备就绪。


6

实际上,每种情况下都将取决于上下文,因为没有一个定义-但通常来说,缓冲区是暂时保存某些内容的地方。我能想到的最好的现实世界比喻是一个等候区。计算中的一个简单示例是缓冲区是指用于临时存储数据的RAM的一部分。


2

缓冲区是内存(内存/内存)中的临时占位符(许多编程语言中的变量),可以在其上转储数据然后进行处理。

缓冲具有许多优点,例如它允许事物并行发生,提高IO性能等。

如果使用不当,如缓冲区溢出,缓冲区下溢等,它也有很多缺点。

C字符缓冲区示例。

char * buffer1 = calloc(5,sizeof(char));

char * buffer2 = calloc(15,sizeof(char));


2

缓冲区是由硬件设备或程序进程共享的数据区域,这些硬件设备或程序进程以不同的速度或不同的优先级进行操作。缓冲区允许每个设备或进程在不被其他设备或进程阻碍的情况下运行。为了使缓冲区有效,缓冲区的大小以及将数据移入和移出缓冲区的算法。

缓冲区是“中点保留地”,但它的存在并不是为了加快活动的速度,而是为了支持单独活动的协调。

该术语在编程和硬件中都使用。在编程中,缓冲有时意味着需要从最终目标位置筛选数据,以便可以在将数据移到常规文件或数据库之前对其进行编辑或其他处理。


1

缓冲区是内存(内存/内存)中的临时占位符(许多编程语言中的变量),可以在其上转储数据然后进行处理。

术语“缓冲区”是一个非常通用的术语,并不特定于IT或CS。在这里,可以暂时存储一些东西,以减轻输入速度和输出速度之间的差异。当生产者比消费者快时,生产者可以继续将输出存储在缓冲区中。当使用者加速时,它可以从缓冲区读取。缓冲区位于中间以弥合间隙。

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.