BUFF的有效性理解


关于Buffer, 对应到硬件上就是ram,sdram,ddr,FIFO等,在高速数据获取传输中经常提到。buffer存在的意义在于缓解输入和输出之间速率不匹配的问题,本质目的是保证数据高速传输获取的同时,避免了数据丢失。但是一个设计不当的Buffer并不能达到这种效果,那么究竟什么样的Buffer才是有效的,看下图:

 

 Buffer作为数据桥梁,对应输入1和输出2,理想的buffer应该是匹配,低速(相对输出而言)的连续的输入,高速(相对输入而言)的离散的读出。因为输入通常和硬件板卡关联在一起的,而输出和接口或者直接的说和PC计算机关联在一起,一般而言,输出的接口(如USB2.0以上, PCIE,SATA等)或者计算机的读出速度是不需要怀疑的,而且计算机的CPU从设计角度考虑,读出数据的动作必须是间歇性的,一个计算机不可能全部时间都在读取数据,它还要参与用户交互,数据存储,数据绘图等等其他操作,所以说读出的部分应该是高速的离散的,这句话没有什么毛病。

那么相对于输出,输入1从设计角度讲,应该是低速的连续的,因为Buffer类似一个容器,里面可以存放一定量的数据,输入按低速的连续的方式给Buffer写数据,经过一段时间后,Buffer差不多满了,这时就要有个触发信号告诉计算机接口,Buffer满了,可以取走了,于是计算机三下五除二把Buffer里的全部数据一下读出,然后又去忙别的事情,比如数据处理,数据存储,用户交互等等。此时,Buffer的输入1又开始低速的连续的往Buffer里写数据,如此循环往复即可达到高速数据传输的目的。

这就是有效Buffer的理解,低速(是相对而言,比如计算机那边的接口速度GB/s,那输入按几十M/s都算是低速了,如果计算机接口那边是串口,那么输入跑几M/s,这样Buffer很快就溢出了,结果就是数据丢失了!)的连续的输入和高速的离散的读出! 所以要保证高速的数据采集,一个有效的Buffer和一个高速的数据输出接口都是必不可少的!

再试想一下,如果没有Buffer会是什么样子的,那就是数据的输入和输出直连,直连的结果是必须时钟同步才能数据不丢失,也就是说高速的计算机必须和低速的接口绑在一起,为了搞成低速,计算机程序必须不停的插入延迟,按循环的方式监视低速接口传来的数据,造成了CPU资源的大量碎片化,用句糙话讲,这叫闲得eggache。

点击数: 399   打印  添加到收藏   发布时间: 2020-07-26




上一篇:PHP页面顶端出现空白问题
下一篇:轻量级数据库SQLite大小的说明





» 相关内容
  光的偏振性检测方法及理解
  netFrame版本对数组最大长度的..
  LC并联谐振用于模拟混频详解
  条形磁铁的磁场方向判断方法
  PCIE开关和桥接的区别
  精密电阻快速匹配方法
  二次曲面参数及flashlight效果
  AHP算法之matlab代码
  LVDS需要注意的几个点
  阴阳与男女之区别
  四象限光电探测器的位置公式
  外触发获取数据实现原理
  自定义USB设备供电不足最终解..
  USB设备连接异常现象
  MCU程序中变量过多引发内存不..