首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >管道中的非阻塞i/o

管道中的非阻塞i/o
EN

Stack Overflow用户
提问于 2011-11-04 15:11:23
回答 1查看 338关注 0票数 1

我有一个进程在实时收集数据,另一个进程在绘制数据。这两个进程通过管道连接,数据采集进程为数据绘图进程提供数据。

我更看重数据采集部分的速度,而不是绘图部分的可靠性。快速skim显示,如果伙伴进程较慢,管道中的默认行为是让管道的写入和读取端表现出阻塞行为。这是不好的,因为数据采集过程可能会等待绘图过程。

有没有办法让外壳管道不阻塞,就像C的O_NONBLOCK一样?我不关心一个数据点是否没有被绘制出来,因为它被一个新的点覆盖了……

编辑:实际上,我认为管道缓冲区足够大,可以容纳数据采集过程的输出,而不需要绘图部分立即处理它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-04 15:49:27

如果数据采集进程需要不受绘图进程的限制而运行,则需要与连接两者的管道不同的结构,或者需要中间的额外进程来丢弃尚未发送到绘图仪的旧数据点。

从概念上讲:

代码语言:javascript
运行
复制
+-------------+    +------------+    +-------+
| Acquisition |--->|Holding Tank|--->|Plotter|
+-------------+    +------------+    +-------+

“保存槽”可以在其输入和输出描述符上使用select()或类似的调用,并且可以保存有限数量的数据点。当一个新的点从获取过程中到达时,如果它的储存箱已满,它可以丢弃最旧的点,并在其位置添加新的点。如果绘图仪输入中有空格,则可以将新的数据点写入绘图仪。同时,采集过程可以全速运行(只要保持罐不会阻塞它),绘图仪也可以全速运行。这三个过程都是通过管道连接的。没有管道作为非阻塞操作运行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8005919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档