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。

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




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





» 相关内容
  PID程序中DAC输出范围的限定区..
  MCU中断编写注意事项
  数据校验原理及简化实现
  一片顶两片的LDO
  三步实现ModelSim仿真Quartus..
  数字下变频的理解
  匿名IMU版本4.34的下位机协议..
  轻量级数据库SQLite大小的说明
  BUFF的有效性理解
  PHP页面顶端出现空白问题
  高速数据采集的一些关键点
  软硬件通用加密思路-针对PC端..
  隔离变压器的作用
  GSM下Unicode和中文字符转码
  Teamview远程ID和PWD自动回传..