Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Io 管道中的非阻塞i/o_Io_Pipe_Nonblocking - Fatal编程技术网

Io 管道中的非阻塞i/o

Io 管道中的非阻塞i/o,io,pipe,nonblocking,Io,Pipe,Nonblocking,我有一个进程实时收集数据,另一个进程绘制数据。这两个进程通过管道连接,数据采集进程向数据绘图进程提供数据 我认为数据采集部分的速度比绘图部分的可靠性更重要。快速显示管道中的默认行为是,如果伙伴进程较慢,管道的写入和读取端将显示阻塞行为。这是不好的,因为数据采集过程可以等待打印过程 有没有办法让壳管不堵塞,一个la C's O_不堵塞?我不在乎是否有一个数据点没有被绘制,因为它会被一个新的点覆盖 编辑:实际上,我认为管道缓冲区足够大,可以容纳数据采集过程的输出,而无需绘图部分立即进行处理。如果数据

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

我认为数据采集部分的速度比绘图部分的可靠性更重要。快速显示管道中的默认行为是,如果伙伴进程较慢,管道的写入和读取端将显示阻塞行为。这是不好的,因为数据采集过程可以等待打印过程

有没有办法让壳管不堵塞,一个la C's O_不堵塞?我不在乎是否有一个数据点没有被绘制,因为它会被一个新的点覆盖


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

如果数据采集过程需要不受绘图过程限制地运行,你需要一个不同的结构,而不是一个连接两个的管道——或者你需要一个额外的中间过程,它可以丢弃尚未发送给绘图仪的旧数据点。 概念上:

+-------------+    +------------+    +-------+
| Acquisition |--->|Holding Tank|--->|Plotter|
+-------------+    +------------+    +-------+

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

< P>如果数据采集过程需要由绘图过程自由运行,则需要一个不同于连接两个管道的结构,或者在中间需要一个额外的过程,可以丢弃尚未发送给绘图仪的旧数据点。 概念上:

+-------------+    +------------+    +-------+
| Acquisition |--->|Holding Tank|--->|Plotter|
+-------------+    +------------+    +-------+
“存储箱”可以对其输入和输出描述符使用
select()
或类似调用,并且可以存储有限数量的数据点。当一个新点从采集过程中到达时,如果其储罐已满,它可以丢弃最旧的点并将新点添加到其位置。如果绘图仪输入中有空间,则可以将新数据点写入绘图仪。同时,采集过程可以平缓地进行(只要储液罐不堵塞),绘图仪也可以平缓地进行。这三个过程都是通过管道连接的。所有管道均不作为非阻塞操作运行