我到处都能看到“BUFFER”这个词,但我不明白它到底是什么。
有人能用通俗的语言解释一下什么是缓冲区吗? 什么时候使用? 它是如何使用的?
我到处都能看到“BUFFER”这个词,但我不明白它到底是什么。
有人能用通俗的语言解释一下什么是缓冲区吗? 什么时候使用? 它是如何使用的?
术语“缓冲区”是一个非常通用的术语,并不是特定于IT或CS的。它是一个临时存储东西的地方,以减轻输入速度和输出速度之间的差异。当生产者比消费者快时,生产者可以继续在缓冲区中存储输出。当使用者找到它时,它可以从缓冲区中读取。缓冲器在中间,用来弥补缺口。
如果你把http://en.wiktionary.org/wiki/buffer上的定义平均一下,我想你就会明白了。
为了证明我们真的“每天必须冒着雪走10英里去上学”,请参阅top -10监视器调用手册第1卷第11.9节,“使用缓冲I/O”,在书签11-24。如果你经常做噩梦,就不要阅读。
想象一下,你正在吃碗里的糖果。你定期吃一片。为了防止碗里的糖用光,有人可能会在碗里的糖变空之前把它装满,这样当你想再吃一块的时候,碗里就有糖了。
碗在你和糖果袋之间起到缓冲作用。
如果你在网上看电影,网络服务会不断地将接下来的5分钟左右下载到缓冲区,这样你的电脑就不必在你看电影的时候下载电影(这会导致挂机)。
缓冲区是内存(ram/磁盘)中的临时占位符(许多编程语言中的变量),可以在其上转储数据,然后进行处理。
缓冲有很多优点,比如它允许事情并行发生,提高IO性能等。
如果使用不当,它也有很多缺点,如缓冲区溢出、缓冲区下溢等。
字符缓冲区示例。
char *buffer1 = calloc(5, sizeof(char));
char *buffer2 = calloc(15, sizeof(char));
实际上,在每种情况下,它都取决于上下文,因为没有一个定义-但一般来说,缓冲区是暂时存放东西的地方。我能想到的最好的现实类比是等待区。计算中的一个简单例子是,缓冲区指的是RAM中用于临时存储数据的一部分。
缓冲区就是用来保存数据的一块内存。在最一般的意义上,它通常是在一个操作中装入的单个内存块,然后在一个或多个操作中清空,这就是Perchik的“糖果碗”示例。例如,在C程序中,你可能有:
#define BUFSIZE 1024
char buffer[BUFSIZE];
size_t len = 0;
// ... later
while((len=read(STDIN, &buffer, BUFSIZE)) > 0)
write(STDOUT, buffer, len);
... 它是cp(1)的最小值。这里,缓冲区数组用于存储read(2)读取的数据,直到写入;然后重新使用缓冲区。
还有更复杂的缓冲区方案,例如循环缓冲区,一个接一个地使用有限数量的缓冲区;一旦缓冲区都满了,索引就会“换行”,以便重用第一个索引。
Buffer的意思是“临时存储”。缓冲区在计算中很重要,因为相互连接的设备和系统很少彼此“同步”,所以当信息从一个系统发送到另一个系统时,它有一个地方等待,直到接收系统准备好。
缓冲区是内存(ram/磁盘)中的临时占位符(许多编程语言中的变量),可以在其上转储数据,然后进行处理。
术语“缓冲区”是一个非常通用的术语,并不是特定于IT或CS的。它是一个临时存储东西的地方,以减轻输入速度和输出速度之间的差异。当生产者比消费者快时,生产者可以继续在缓冲区中存储输出。当使用者加速时,它可以从缓冲区读取。缓冲器在中间,用来弥补缺口。
缓冲区是由硬件设备或程序进程共享的数据区域,这些硬件设备或程序进程以不同的速度或不同的优先级集运行。缓冲区允许每个设备或进程在不受其他设备或进程影响的情况下运行。为了使缓冲区有效,缓冲区的大小以及将数据移入和移出缓冲区的算法。
缓冲区是一个“中点保持位置”,它的存在与其说是为了加速一个活动的速度,不如说是为了支持不同活动的协调。
这个术语在编程和硬件中都有使用。在编程中,缓冲有时意味着需要从其最终预期位置筛选数据,以便在将其移动到常规文件或数据库之前可以对其进行编辑或其他处理。
缓冲区是“一个临时存储东西的地方,以减轻输入速度和输出速度之间的差异”是准确的,这是一种更“外行”的理解方式。
“缓冲”这个动词已经进入了日常词汇。例如,当网络连接很慢,Netflix的视频被打断时,我们甚至会听到父母说:“给它一点缓冲时间。”
他们说的是,“点击暂停;为更多的视频下载到内存留出时间;然后我们就可以不停地看了。”
根据生产者/消费者的类比,Netflix正在制作视频。观众正在消费它(观看它)。在您的计算机上,临时存储额外下载的视频数据的空间是缓冲区。
视频进度条可能是最好的例子:
那个视频是5:05。它的总播放时间由条的白色部分表示(如果你还没有开始观看它,它将是纯白色的)。
正如紫色所表示的,我实际上已经花费(观看)了10秒的视频。
条形图的灰色部分是缓冲区。这是当前下载到内存缓冲区中的视频数据,你可以在本地使用。换句话说,即使你的互联网连接被中断,你仍然可以观看你缓冲的区域。