mkfifo - 磁盘 I/O 真的发生了吗?

Jmo*_*y38 10 io fifo

我有 2 个应用程序:

  • 生产者(N 个实例)
  • 消费者(1个实例)

我目前从生产者那里写出中间结果,然后消费者从磁盘读取这些文件并产生最终结果。

我想通过将生产者的输出直接“流式传输”到消费者来最小化这个 I/O。

我碰到命名管道(mkfifo)和随后的例子在这里。这看起来很棒,但我无法确定的是实际是如何实现的?FIFO 队列是否只是通过文件进行缓冲?如果是这样,那可能对我没有帮助。我希望内容完全“通过内存”流式传输而不使用磁盘。也许这在整个流程中是不可能的?

Mar*_*ick 10

没有磁盘 i/o(除非在文件系统中导航以打开 fifo 文件。)

Linux fifo(7) 手册页

FIFO 特殊文件(命名管道)类似于管道,不同之处在于它作为文件系统的一部分进行访问。[...] 当进程通过 FIFO 交换数据时,内核会在内部传递所有数据而不将其写入文件系统。因此,FIFO 特殊文件在文件系统上没有内容;文件系统条目仅用作参考点,以便进程可以使用文件系统中的名称访问管道。