我有两个流程进行沟通。第一个将数据写入管道或fifo(我已尝试过两者),第二个读取其中的内容。发送的数据目前是六个直接来自传感器的浮点数,因此需要经常上传(10Hz)。
问题是读取数据的过程有点“重”,可能无法足够快地读取。管道将满,读数将延迟到程序结束。
因为不能容忍这样的延迟,我可以在写入部分检测到管道是否已满(在这种情况下,如果我错了就纠正我,它会等待它有足够的空间来写入数据) 。如果可以进行这样的检测,我怎样才能清除管道的内容,以便读取部分能够立即接收到最近的数据,而不必经过整个旧的管道?
简而言之,有没有办法只清空一个数据管道(不必关闭并重新打开就可以了。)
非常感谢,
答案 0 :(得分:0)
这将减少管道充满的频率,但不会消除它。
范式更改:调整读者以丢弃一定百分比的读数。
<强>作家强>
当作者看到一个完整的队列时,它写的下一个数字是一个特殊的数字(例如NaN),并且它会写下所需的数字。
<强>阅读器强>
读者将丢掉P%的数字。
读者读取一个号码 - 根据需要等待。如果不是扔掉的候选人,请照常进行。
当读者考虑丢弃一个数字以达到其丢失百分比时,它首先测试管道是否为空。如果是这样,读者知道减少被丢弃的百分比并使用首先读取的数字。如果管道不是空的,它会读取管道,丢弃第一个数字并使用第二个。
当读者读取特殊号码时,它知道它没有丢弃足够数量并增加其百分比,然后再次读取管道。
如果读写器端的整体性能变化不大,那么读者每次都会丢掉1个数字,以便平衡快速写入器和阅读器的性能。如果有一个轻微的倾斜有利于一个空队列而不是一个完整的队列,管道很少会填满,读者会更频繁地收到新的数字。