作为我的Uni课程的一部分,我们已经被展示并被要求使用管道在进程之间进行通信(使用pipe()
和fork()
)进行一些小练习。没有问题让它工作或与概念,但在这些要求之外,我想知道用这种类型的管道写和读的效率如何?
如果我有一些值,我正在打包到一个4字节的块,那么一次打包并写入100个值(所以400字节)会更好吗?
如果我每次写入4个字节,那么性能是否可比?
一次性管道400字节是否阻止接收器执行任何操作,直到写入完成为止 - 假设接收器只是尝试读取前4个字节,是否能够在写入之后执行此操作,但在所有写入之前400完成了吗?
答案 0 :(得分:4)
管道的处理方式与文件类似(当然,它们不在磁盘上)。它们以相同的方式缓冲,并且对它们的句柄进行类似处理。不要尝试手动缓冲管道;它已经这样做了。如果您真的关心它,您可以尝试两种方式并收集一些运行时间。我建议你只需要编写4个字节的块。 除非您知道存在问题,否则请勿尝试进行优化。
答案 1 :(得分:1)
我可以告诉你一个轶事。我曾经在一个嵌入式Linux平台的Web系统上工作过。我们尝试使用内部通信管道,因为它们比UNIX套接字或TCP套接字快得多。最后我们还是使用了套接字,因为它们在我们的应用程序中使用起来更简单。 (我们需要双向沟通,管道只有一种方式。)