单缓冲和双缓冲 有啥区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单缓冲和双缓冲 有啥区别相关的知识,希望对你有一定的参考价值。

单缓冲,实际上就是将所有的绘图指令在窗口上执行,就是直接在窗口上绘图,这样的绘图效率是比较慢的,如果使用单缓冲,而电脑比较慢,你回到屏幕的闪烁。
双缓冲,实际上的绘图指令是在一个缓冲区完成,这里的绘图非常的快,在绘图指令完成之后,再通过交换指令把完成的图形立即显示在屏幕上,这就避免了出现绘图的不完整,同时效率很高。
一般用OpenGL绘图都是用双缓冲,单缓冲一般只用于显示单独的一副非动态的图像。
参考技术A 单缓冲,实际上就是将所有的绘图指令在窗口上执行,就是直接在窗口上绘图,这样的绘图效率是比较慢的,如果使用单缓冲,而电脑比较慢,你回到屏幕的闪烁。
双缓冲,实际上的绘图指令是在一个缓冲区完成,这里的绘图非常的快,在绘图指令完成之后,再通过交换指令把完成的图形立即显示在屏幕上,这就避免了出现绘图的不完整,同时效率很高。
一般用OpenGL绘图都是用双缓冲,单缓冲一般只用于显示单独的一副非动态的图像。
参考技术B 缓冲区管理
什么是缓冲区?有什么作用?
缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可以利用内存作为缓冲区。
使用硬件作为缓冲区的成本较高,容量也较小,一般仅用在对速度非常高的场合(存储器管理寄存器,有对页表访问的频率较高,因此使用速度很快的联想寄存器 来存放页表项的副本)

一般情况下更多的是使用内存作为缓冲区,“设备独立性软件”的缓冲区就是要组织管理好这些缓冲区。

缓冲区的作用
缓和CPU和IO设备之间速度不匹配矛盾。
减少对CPU的中断频率,放宽对CPU中断相应的时间限制
解决数据粒度不匹配的问题
提高CPU和IO设备之间的并行性。

什么是单缓冲:
假设某用户进程请求某块设备读入若干块数据。若采用单缓冲的策略,操作系统会在主存中为其分配一个缓冲区。
当缓冲区不为空时不能往里面放入数据,只有缓冲区为空才能放入数据,但是一次放入的数据必须充满整个缓冲块,才能从缓冲区把数据传出。

结论:采用单缓冲策略,处理一块数据平均耗时MAX(C,T)+M。其中C是CPU处理工作区的时间,T是从IO到缓冲区的时间,M是缓冲区的数据存到工作区的时间。

双缓冲
若采用双缓冲策略,操作系统会在主存中为其分配两个缓冲区。
采用双缓冲策略,处理一个数据块的平均耗时是Max(T, C+M).

使用单缓冲/双缓冲在通信时的区别

管道通信中的管道就是缓冲区。要想实现双向通信必须设置两个管道。

循环缓冲区
将大小相等的缓冲区连接成一个循环队列。循环队列中有两种缓冲区,一种是没有数据的空闲缓冲区,一种是由数据的满缓冲区。又有两个指针分别指向空缓冲区和满缓冲区。

缓冲池有系统中共用的缓冲区组成。这些缓冲区按照使用状况可以分为:空缓冲队列、装满输入数据的缓冲队列、装满输出数据的缓冲队列。

根据一个缓冲区在实际运算中扮演的功能不同,又设置了四种工作缓冲区:用于收容输入数据的工作缓冲区(hin)、用于提取输入数据的工作缓冲区(sin)、用于收容输出数据的工作缓冲区(hout)、用于提取输出数据的工作缓冲区(sout)。本回答被提问者采纳
参考技术C 单缓冲,bai实际上就是将所有的绘图指du令在窗口上zhi执行,就是dao直接在窗口上绘图,这zhuan样的绘图效率shu是比较慢的,如果使用单缓冲,而电脑比较慢,你回到屏幕的闪烁。
双缓冲,实际上的绘图指令是在一个缓冲区完成,这里的绘图非常的快,在绘图指令完成之后,再通过交换指令把完成的图形立即显示在屏幕上,这就避免了出现绘图的不完整,同时效率很高。
一般用OpenGL绘图都是用双缓冲,单缓冲一般只用于显示单独的一副非动态的图像。

vim中的缓冲区和寄存器有啥区别?

【中文标题】vim中的缓冲区和寄存器有啥区别?【英文标题】:What is the difference between buffers and registers in vim?vim中的缓冲区和寄存器有什么区别? 【发布时间】:2013-12-08 12:48:58 【问题描述】:

在 vim 中,命令 :reg[ister] 向我显示寄存器列表,而 :ls 显示缓冲区列表,但我不确定寄存器和缓冲区之间的确切区别是什么。我认为寄存器是虚拟内存,与"(double quotation mark)+a-zA-Z0-9.%#:-"+motion一起使用。

那么,什么是缓冲区?到目前为止,我混淆了缓冲区和寄存器。

(我唯一知道的是寄存器在 CPU 中,缓冲区在 RAM 中。我需要明确这两个概念才能很好地使用 vim。

这是我在文档中发现的关于寄存器的内容:

There are nine types of registers:        
1. The unnamed register ""    
2. 10 numbered registers "0 to "9    
3. The small delete register "-    
4. 26 named registers "a to "z or "A to "Z    
5. four read-only registers ":, "., "% and "#    
6. the expression register "=    
7. The selection and drop registers "*, "+ and "~     
8. The black hole register "_    
9. Last search pattern register "/

【问题讨论】:

【参考方案1】:

缓冲区通常是指加载到内存中用于编辑的文件,尽管也有与文件无关的缓冲区。缓冲区的使用允许您同时处理多个文件。

寄存器是一种剪贴板,是可以保存文本的内存空间。有几种寄存器。当您执行某些操作(例如拉动或删除文本)时,其中一些会自动填充。更多信息可以通过键入在帮助中找到 :help registers

【讨论】:

【参考方案2】:

在 vim 中,缓冲区通常指的是打开的文件。它位于 RAM 中,与文件系统中的文件版本相比,可以进行未保存的修改。

您可以同时拥有多个缓冲区(如果您正在编辑多个文件)。 然后你可以使用“bn”/“bp”在它们之间切换,使用“bd”删除一个。

【讨论】:

【参考方案3】:

它们看起来相似但不同:

有一个名为unnamed register (")的寄存器(就像剪贴板一样)

有一个名为[No Name]的缓冲区(包含一个不存在的文件/要写入文件的内容)

一些误用:

【讨论】:

以上是关于单缓冲和双缓冲 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

TCP-缓冲区和粘包、拆包有啥关系?

IO缓冲区

大国之间建立缓冲区的好处

怎么计算环形缓冲区长度

webgl 缓冲区

opengl 单缓冲与双缓冲