文件系统中的命名管道不是很慢吗?

Posted

技术标签:

【中文标题】文件系统中的命名管道不是很慢吗?【英文标题】:Aren't Named Pipes in the Filesystem slow? 【发布时间】:2018-05-26 20:21:29 【问题描述】:

将IPC的流数据写入文件系统中的文件等等到您的(HDD o. SSD)不是没有用吗?我的意思是,在内存中创建一个“缓冲”管道不是更好吗,以便我们在驱动器上有更多的性能?但我是 IPC 的新手……或者它不是写到磁盘上吗?但是系统写入文件系统而不写入磁盘怎么可能呢?

【问题讨论】:

您是否尝试过对命名管道的使用进行基准测试以实际查看它们是否很慢? 不,因为我以前从来没有用过它。这个问题可以帮助我决定是否要了解有关管道的更多信息,或者是否想为 IPC 使用其他东西。 请注意,这与 Unix & Linux Stack Exchange 上的Does named pipe modify the filesystem? 问题类似。 【参考方案1】:

文件系统中的命名管道不是很慢吗?

它们并不比任何其他类型的管道慢。

在内存中创建一个“缓冲”管道不是更好吗

如果您没有内存限制,那么可以(请参阅下面的旧操作系统链接)。

[...] 还是没有写入磁盘?

您的猜测是正确的——在许多现代操作系统上,进入命名管道的数据并没有被写入磁盘;文件系统只是一个名称空间,它包含一些东西,告诉你可以在哪里找到管道的末端。来自Linuxman page for pipe:

注意:虽然 FIFO 在文件系统中有一个路径名,但 FIFO 上的 I/O 不涉及对底层设备的操作(如果有的话)。

有older operating systems that buffer pipe data within a filesystem,但考虑到你的问题的措辞(在这样的系统上,所有管道都通过文件系统而不仅仅是命名的)我怀疑这是一个切线。

【讨论】:

以上是关于文件系统中的命名管道不是很慢吗?的主要内容,如果未能解决你的问题,请参考以下文章

进程间通信——命名管道

docker容器文件夹中的命名管道通过boot2docker挂载到mac os x文件系统

请教PHP里使用命名管道连接本机mysql如何写连接串

请教PHP里使用命名管道连接本机mysql如何写连接串? - 技术问答

命名管道FIFO

Java 7 WatchService 对其他人来说很慢吗?