`
lovecontry
  • 浏览: 1042730 次
文章分类
社区版块
存档分类
最新评论

Buffer是万恶之源

 
阅读更多

Buffer是万恶之源

断言啥玩意是万恶之源,是需要证据的,不能凭空诬陷。

甚至,我跳出来激动地说"我最近每天就睡两个小时,昼夜颠倒,白天还总被人

打电话吵醒。我这么不容易,怎么能是凭空诬陷呢。另外,我像这样的人吗。"

这也不行。需要证据。

事情是这样的。

Buffer者也,中文译名是 缓冲区,计算机术语。不过,下面要谈的,其实也不

怎么涉及计算机,看官不妨当此段作赋比兴之类。

起初,俺们是要整个程序。这程序分成两部分。一部分刘同学开发,负责从硬件

里把数据读出来,加加减减什么的,这部分不妨称 数据控;另一部分是关同学

开发,负责从 数据据 里把数据读出来,显示在人类容易看到的屏幕上面,画个

曲线啊什么的,这部分不妨称为 显摆控。

数据控是控数据的,显摆控是控显摆的,这样比较容易记了。于是事情就这样成

了。

数据控用C语言的风格写的C++,大致意思是风格古老而严谨。赞一下刘同学的程

序架构。

显摆控是用C#语言写的,大致意思是风格很in,效果很High

这两部分如何交流呢。我们找了个特古老的技术,叫做管道。

数据据有了数据,交给管道;显摆控从管道里读了数据,即时的显摆出来。于

是,用设备的人看到了设备的数据。如果这样,事情就成了。

差啥呢?

发现1数据不是一个一个出来的,而是一团子一团子出来的。或者如毛同学说

的,是一坨一坨出来的。本来电机走着,激光亮着,显摆的数据应该是电机走几

步,显摆一下,走几步,显摆一下,走几步,显摆一下...就像许多软件,非要

不停地告诉你"我干活呐,我正常工作呐,我可真干了不少啊。"

为了加强用户的安全感,和软件开发商的安全感,也许这是必要的。反正,俺们

准备要这个效果。

结果不是的。数据,一坨一坨出来的。

连这,也是好不容易发现的。最初看到的是,前面的一种数据,根本就不显摆,

后面的另一种数据,正常频率显摆。

明眼人一看便知:那一定是后面的数据与前面的数据是不同的技术手段。国情不

同,用同样的制度,所以结果也不一样。如同美英用资本主义就强大,日本也是

啊,而一些蕞尔小国用了,那就完犊子了。

但是! 这两部分都是刘同学一个人用同一种风格开发的,且风格严谨。严谨到啥

程度呢,关同学和俺用了两个来小时,想证明其中一行是错误的。最后,证明关

同学和俺试图证明那是错误的这一行为,是错误的。

后来! 关同学终于发现,前一种数据和后一种数据的速度不一样。再之前,关

同学还发现,前一种数据不是一点也不实时显摆,而是,一直不吭声,然后"

"一下,一堆数据出来了,中间过程就全没啥。

意思可能是,中间的过程你不用了解啦,反正有结果就行呗。

插话,好多同学喜欢这么干,这并非优良习惯。交互始终都是必要的。说了一百

遍了,不赘述。插话完毕。

是刘同学的程序有问题,是关同学的程序有问题?反正沟通中的问题,应该是其

中至少一方,或者双方的。

以下诊断的次序不分先后。

1关同学换了刘同学的数据控程序,用来沟通,按相同的思路写了一个一样的,除了刘

同学的数据控读真正的设备,关同学的程序不读真正的设备,数据全是假的,但

是跟真的一样好。

观察的结果是: 用刘同学的数据控,数据就一团团;用关同学的伪数据控,数

据就很实时。

2关同学换了关同学的程序显摆控,用来和刘同学的数据控沟通,按相同思路写

了一个一个的,除了真的显摆控逻辑更复杂一些,伪显摆控咔擦掉了一部分。

观察的结果是: 与用真显摆控没啥区别。

2.5俺们用了一个传统的,微软公司开发的工具和刘同学的数据控沟通。换句话

说,权威出场啦。

观察结果:数据控快乐地工作着,一步一个脚印一声叫唤,实时得很。

22.5分析,是不是看起来刘同学的数据控程序认人唯亲,不是领导不给好脸色啊。

可是从1分析, 是不是关同学的显摆控程序认人唯亲,不是自己家的产品就不好

好合作啊。

其实,不是的,这一切都只是假象。

因为刘的数据控和关的显摆控 根 本 从 来 就没有真正地直接地沟通过。

在两者之间,有一个叫做管道的东西存在。它声称自己接收的和发出的是完全相

同的。取之于啥用之于啥。但是,它并非如所声称的那样工作,或者说,在哪个

犄角九日日九,还有个别的文档,你也早就被表示过认同的,上面写着:

我告诉你的,才是真的;我不知道你的,就是不存在的。

不禁又冒着冷汗想起那段:

引文大意开始

问:哥是不是真实的一个人,还是只是一个虚幻的假的偶像?

答:你说的真实是啥意思?

问:就是像我这样存在的。

答:你不存在。

引文大意结束

因为刘的数据控和关的显摆控 根 本 从 来 就没有真正地直接地沟通过。

在他们之间,Buffer是万恶之源。

当刘的数据控与微软的那位领导(大名曰控制台)沟通的时候,buffer的长度是

0。即,管道知无不言,言无不尽,毫无保留,而时刻都没有保留。

当刘的数据控与关的显摆控合作的时候,buffer的长度被设置为天知道的一个长

度(注:"If the size of the internal buffer was unspecified when the

stream was constructed, its default size is 4 kilobytes (4096

bytes)."),反正不是0。那意思就是,"有数据,是啊,我有数据啦,但是我觉

得,怎么说捏,你现在还太幼稚,不适合都显摆出来。你还真的都想显摆出来

啊,那么,我只好不给你啦。这可是为了你好喔。"

我甚至不让你知道数据的存在。"真的没有数据,不信你读。GetLine(),果然啥

也没有吧。到一个阶段,我会把数据给你滴。什么,你想实时显摆,不是说了这

都是为你好么。"

Buffer对刘的数据控说,你给我的数据我接收到了,再来再来;Buffer对关的显

摆控说,还没有数据哩,你在等等。

最终,当数据大批涌向关的显摆控的时候,Buffer确实可以说,你看,我毫无保

留。

但是,你真的觉得这毫无不同么?

在工程中,我们不得不经常地 间接,而不是直接 使用材料和操作物件。

我们使用指针间接地访问变量; 我们使用文件封装了键盘和显示器; 我们使用

工具隔离高热和危险。

但是,我们从来没有说过, 当我们想利用工具的时候,工具可以剥夺我们直接触

摸世界的权利。

你可以劝我不要直视太阳,但是,请不要替我捂住眼睛。

所以,Buffer是万恶之源。

我还以为过了青春期就不用再这么叽歪了呐。


分享到:
评论

相关推荐

    google protocal buffer 源代码,编译通过

    google protocal buffer 源代码,编译通过

    Google Protocol Buffer 用户手册 和 源代码打包

    这个是Google公司的Protocol Buffer最新版本的源代码,库文件和用户手册。支持各种跨语言和操作系统平台通讯和序列化操作。Google公司几乎所有内部程序通讯都是基于这个工具库。 所有文档都已经打包在内。不需要...

    oracle性能调优之buffer cache

    Oracle 性能调优之 Buffer Cache Buffer Cache 是 Oracle 中的一种缓存机制,负责将磁盘上的数据 block 读取到内存中,以提高数据库的访问速度。在本文中,我们将详细介绍 Buffer Cache 的工作原理、状态、管理和...

    C语言头文件 BUFFER

    C语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC...

    buffer应用缓冲区

    buffer应用缓冲区 socket应用层

    ZBuffer扫描线

    ZBuffer 扫描线 ZBuffer 扫描线 ZBuffer 扫描线 ZBuffer 扫描线 ZBuffer 扫描线 ZBuffer 扫描线 ZBuffer 扫描线 ZBuffer 扫描线 ZBuffer 扫描线 ZBuffer 扫描线 ZBuffer 扫描线 ZBuffer 扫描线

    netty-buffer-4.1.68.Final-API文档-中文版.zip

    赠送源代码:netty-buffer-4.1.68.Final-sources.jar; 赠送Maven依赖信息文件:netty-buffer-4.1.68.Final.pom; 包含翻译后的API文档:netty-buffer-4.1.68.Final-javadoc-API文档-中文(简体)版.zip; Maven坐标:...

    netty-buffer-4.1.73.Final-API文档-中文版.zip

    赠送源代码:netty-buffer-4.1.73.Final-sources.jar; 赠送Maven依赖信息文件:netty-buffer-4.1.73.Final.pom; 包含翻译后的API文档:netty-buffer-4.1.73.Final-javadoc-API文档-中文(简体)版.zip; Maven坐标:...

    RingBuffer 循环缓存 亲测可用 V2 修改一处

    4.当写入数据的长度大于ringbuffer的可写入长度时,多余的数据将会丢弃。所以写入数据前,先判断ringbuffer的可写入长度。另外程序包含示例。 支持windows平台的vs与linux平台的clion,语言级别实现,与平台无关。 ...

    netty-buffer-4.1.11.Final-API文档-中文版.zip

    赠送源代码:netty-buffer-4.1.11.Final-sources.jar; 赠送Maven依赖信息文件:netty-buffer-4.1.11.Final.pom; 包含翻译后的API文档:netty-buffer-4.1.11.Final-javadoc-API文档-中文(简体)版.zip; Maven坐标:...

    OpenGLES demo - 10. DrawElements, Vertex Buffer和Index Buffer

    个人博客中讲OpenGLES入门课程的第10章,关于drawElements和vertex buffer以及index buffer的代码

    01 Protocol Buffer技术详解(语言规范).doc

    Protocol Buffer 技术详解(语言规范) Protocol Buffer 是一种语言中立、平台中立、可扩展的序列化数据格式,用于在通信网络和数据存储中交换结构化数据。Protocol Buffer 技术的主要优点是可以在不同的语言和平台...

    netty-buffer-4.1.27.Final-API文档-中文版.zip

    赠送源代码:netty-buffer-4.1.27.Final-sources.jar; 赠送Maven依赖信息文件:netty-buffer-4.1.27.Final.pom; 包含翻译后的API文档:netty-buffer-4.1.27.Final-javadoc-API文档-中文(简体)版.zip; Maven坐标:...

    circularbuffer_zip_circularbuffer_源码

    circular buffer using C#

    netty-buffer-4.1.23.Final-API文档-中文版.zip

    赠送源代码:netty-buffer-4.1.23.Final-sources.jar; 赠送Maven依赖信息文件:netty-buffer-4.1.23.Final.pom; 包含翻译后的API文档:netty-buffer-4.1.23.Final-javadoc-API文档-中文(简体)版.zip; Maven坐标:...

    操作系统 nobuffer

    file_nobuffer 源代码 资料 thanks

    ArcMap中Buffer的创建及使用

    介绍ArcMap中Buffer的创建及使用,并且附图说明。

    Linux 通用块设备层基础之buffer_head .

    Linux 通用块设备层基础之buffer_head

    Lab1-Buffer OverFlow

    Lab1-Buffer OverFlow,包含代码、实验说明和论文。

    bgr buffer与bgra buffer

    保存的两块rgb和rgba buffer数据,用于大家使用和研究,可以通过opencv加载图片保存,或者硬解码保存,或者libjpeg保存,我是通过deepstream直接保存的

Global site tag (gtag.js) - Google Analytics