内容简介:在看《Unity shader入门精要》的时候,讲到CPU和GPU的合作,CPU给GPU发送图形绘制命令,如果说按照“发送一个命令,执行一个绘制操作”这样的模式来,就会造成性能浪费啊。你想,如果GPU绘制时间比较长,那CPU是不是要等待,本来这个时候它可以多发几个命令的;或者CPU被其他任务占据了,GPU是不是也要等待?这就是一对一的接头造成的问题,而建立一个缓冲区就可以一定程度的缓解。“缓冲”,不要去想战争里的缓冲,而要去想水池的模型:一个水池,一个开关进水,另一个开关放水;当水比较多了,进水就暂停下,
在看《Unity shader入门精要》的时候,讲到CPU和GPU的合作,CPU给GPU发送图形绘制命令,如果说按照“发送一个命令,执行一个绘制操作”这样的模式来,就会造成性能浪费啊。你想,如果GPU绘制时间比较长,那CPU是不是要等待,本来这个时候它可以多发几个命令的;或者CPU被其他任务占据了,GPU是不是也要等待?
这就是一对一的接头造成的问题,而建立一个缓冲区就可以一定程度的缓解。“缓冲”,不要去想战争里的缓冲,而要去想水池的模型:一个水池,一个开关进水,另一个开关放水;当水比较多了,进水就暂停下,水少了就开启。这样,放水的开关是不是可以保持一直有水放,完全不需要暂停,而进水的开关也可以自由的控制进水的节奏。对应到上面,“进水”就是CPU施放绘制命令,“放水”就是GPU执行绘制操作。
缓冲的好处是:两方都按照各自的节奏进行操作,但是却又可以完全的顺序衔接起来。
视频缓冲
在年少高接触电脑的时候,看视频卡顿的时候就会出现***“缓冲中” 的提示啊,虽然你知道这个是视频在加载的意思,但是TMD为什么不用“加载中”,而用 “缓冲中”***这个让人想到打仗缓冲区的概念,难道视频造成破坏需要缓一缓?
首先一个原因我想就是当时用户体验这个东西还没有被深刻强调,很多东西都是“程序员式”的取名,Windows的很多操作提示真是让电脑初学者害怕。
另外就是这个“程序员式”的取名背后程序逻辑。在程序的角度,“缓冲”的概念是怎么出来的?
视频播放的流程,分成两大块就是解码和渲染。
- 解码:从网络或本地文件获取数据包,提取帧数据,解码。
- 渲染:把帧数据转成图像数据显示或者提供个OpenGL这些图形处理库显示。
这两部分是不是很像上面的CPU和GPU的关系,如果采用“一对一”的模式,那就是获取一帧画面播放一帧,如果那么网络稍有一点不稳定,就会播放卡顿,时快时慢。
采用缓冲区就是好的解决方案。这大概就是视频播放卡顿时,为什么会出现“缓冲中”的提示吧。
“缓冲区”这个词
“缓冲区”呢,是***buffer***这个词的翻译,缓冲很容易让人产生战争缓冲区(提第3次了)的联想,进而产生理解错误(“渲染管线”的翻译就是这个,pipeline明明该翻译成流水线)。在很对用到这个词的地方,它代表的本质上是一段内存数据,伴随着“一进一出动态存储”的这个模式。之所以使用buffer这个带有“减轻”意思的词,大概是它减轻的连接的双方的接头的严格程度吧。
举个形象的例子,两种情况:
-
两个人合作包饺子,一个人擀皮,一个人包馅。如果你们中间放个盆,擀皮的只管擀皮,擀好了放进盆里,包馅的只管从盆里拿出皮来包。这个盆就是缓冲区。
-
两个人都站在空中的钢丝上,而且之间隔着2米远,擀皮的人只能把皮丢给包馅的。这种就是一对一模式了。
对比一下两种情况的紧张程度,“减轻”的意思在这吧。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Rework
Jason Fried、David Heinemeier Hansson / Crown Business / 2010-3-9 / USD 22.00
"Jason Fried and David Hansson follow their own advice in REWORK, laying bare the surprising philosophies at the core of 37signals' success and inspiring us to put them into practice. There's no jarg......一起来看看 《Rework》 这本书的介绍吧!