为什么命名管道和写入文件一样慢?
我试图了解命名管道的工作原理,以便简化单向进程间通信。我预计会由于将数据复制到循环缓冲区而产生一些开销,我本以为它存储在RAM中,因此我希望管道比写入文件快得多(因为RAM比磁盘快几个数量级)。 相反,我发现命名管道(或匿名管道)与文件的速度大致相同。这是在运行普通Linux并具有普通磁盘驱动器(非固态)的3 GHz桌面上。这是Python中的简化测试程序: import sys import time import random megabyte = "".join(random.choice("abcdefghijklmnopqrstuvwxyz") for x in range(1024**2)) while True: before = time.time() sys.stdout.write(megabyte) after = time.time() sys.stderr.write("{} microseconds\n".format(1e6 * (after - before))) 管道直达/dev/null: python test.py > /dev/null 每兆字节产生2.1微秒(恒定)。 管道到文件: python test.py > /tmp/testout.txt 在500微秒和930微秒之间跳转(随着文件变大,这个值越来越普遍-大概是在寻找磁盘空间)。 然后是命名管道: mkfifo testpipe cat testpipe > /dev/null …