Buffer是万恶之源

    技术2022-06-24  55

    Buffer是万恶之源

     

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

     

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

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

     

    这也不行。需要证据。

     

    事情是这样的。

     

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

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

     

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

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

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

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

     

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

    了。

     

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

    序架构。

     

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

     

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

     

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

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

     

    差啥呢?

     

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

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

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

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

     

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

    准备要这个效果。

     

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

     

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

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

     

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

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

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

     

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

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

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

     

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

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

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

     

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

     

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

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

     

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

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

     

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

     

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

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

    是跟真的一样好。

     

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

    据就很实时。

     

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

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

     

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

     

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

    说,权威出场啦。

     

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

     

    从2和2.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是万恶之源。

     

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


    最新回复(0)