读取/写入管道是否是一项昂贵的操作?

3
作为我大学课程的一部分,我们被展示并要求使用管道(使用pipe()fork())在几个小练习中进行进程间通信。在满足这些要求时没有问题,但是除此之外,我想知道使用这种类型的管道编写和读取数据的效率如何?
如果我有一些值要打包成4字节的块,是一次性打包并写入100个值(因此为400字节)更好呢?
还是如果我每次写入4个字节,做100次写入,性能相当?
一次性将400字节传输是否会阻止接收方执行任何操作 - 假设接收方只尝试读取前4个字节,它能在所有400字节完成之前读取到吗?
2个回答

4

管道的处理方式与文件类似(当然,它们不在磁盘上)。它们以某些相同的方式进行缓冲,并且对它们的句柄的处理方式也类似。不要尝试手动为管道进行缓冲;它已经这样做了。如果您真的很关心它,可以尝试两种方法并收集一些运行时间。我建议只写4字节的块,就像您拥有它们一样。除非您知道存在问题,否则不要尝试优化。


这更多是出于好奇而非担忧,这基本上就是我希望得到的答案。谢谢! - DMA57361

1

我可以给你讲个轶事。我曾经在一个嵌入式Linux平台上开发过一个网络系统。我们尝试使用管道来进行内部通信,因为它们比UNIX套接字或TCP套接字更快速。最终我们还是选择了套接字,因为在我们的应用程序中使用起来更简单。(我们需要双向通信,而管道只支持单向通信。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接