缓冲区是什么意思?

时间:2009-03-15 18:43:52

标签: buffer terminology

我到处都看到“BUFFER”这个词,但我无法理解其究竟是什么。

  1. 请问任何人请用外行的语言解释什么是缓冲区?
  2. 何时使用?
  3. 如何使用?

8 个答案:

答案 0 :(得分:226)

想象一下,你正在从碗里吃糖果。你经常拿一件。为了防止碗用完,有人可能会在碗变空之前重新装满碗,这样当你想要另一块时,碗里就会有糖果。

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

如果您正在线上观看电影,网络服务会在接下来的5分钟左右不断下载到缓冲区,这样您的计算机就不必在观看时下载电影(这会导致挂)。

答案 1 :(得分:81)

术语“缓冲区”是一个非常通用的术语,并非特定于IT或CS。这是一个临时存储的地方,以减轻输入速度和输出速度之间的差异。虽然生产者比消费者更快,但生产者可以继续将输出存储在缓冲区中。当消费者加速时,它可以从缓冲区读取。缓冲区位于中间以弥合差距。


如果你在http://en.wiktionary.org/wiki/buffer平均定义,我想你会明白这一点。

为了证明我们确实“每天必须走10英里才能上雪去学校”,请参阅TOPS-10 Monitor Calls Manual Volume 1,第11.9节“使用缓冲I / O”,书签11-24。如果你受到噩梦,请不要阅读。

答案 2 :(得分:18)

缓冲区只是用于保存数据的一块内存。在最普遍的意义上,它通常是一个内存块,在一次操作中加载,然后在一个或多个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)读取的数据,直到写入为止;然后重新使用缓冲区。

使用了更复杂的缓冲方案,例如循环缓冲区,其中使用了一些有限数量的缓冲区,一个接着一个;一旦缓冲区全部填满,索引“回绕”,以便重新使用第一个缓冲区。

答案 3 :(得分:8)

缓冲区意味着“临时存储”。缓冲区在计算中很重要,因为互连的设备和系统很少彼此“同步”,因此当信息从一个系统发送到另一个系统时,它可以等到收件人系统准备就绪。

答案 4 :(得分:5)

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

答案 5 :(得分:1)

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

缓冲有很多优点,可以让事情并行发生,提高IO性能等等。

如果没有正确使用,如缓冲区溢出,缓冲区下溢等,它也有许多缺点。

C字符缓冲区示例。

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

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

答案 6 :(得分:1)

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

术语“缓冲区”是一个非常通用的术语,并非特定于IT或CS。这是一个临时存储的地方,以减轻输入速度和输出速度之间的差异。虽然生产者比消费者更快,但生产者可以继续将输出存储在缓冲区中。当消费者加速时,它可以从缓冲区读取。缓冲区位于中间以弥合差距。

答案 7 :(得分:1)

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

缓冲区是一个"中点保持位置"但并不是为了加快活动的速度,而是为了支持单独活动的协调。

该术语既可用于编程,也可用于硬件。在编程中,缓冲有时意味着需要从最终的预期位置屏蔽数据,以便在移动到常规文件或数据库之前对其进行编辑或以其他方式处理。