为什么管进猫比不管进猫快



我刚刚发现做find .比做find . | cat慢。以下是在我的主目录中执行time find .三次的结果

First:
real    0m4.385s
user    0m0.546s
sys     0m2.072s
Second:
real    0m4.090s
user    0m0.514s
sys     0m1.798s
Third:
real    0m4.197s
user    0m0.508s
sys     0m1.905s

使用time find . | cat可以显著改善结果:

First:
real    0m2.988s
user    0m0.378s
sys     0m1.649s
Second:
real    0m2.768s
user    0m0.370s
sys     0m1.471s
Third:
real    0m2.768s
user    0m0.370s
sys     0m1.471s

正如您所知,find . | cat要快得多。我真的很困惑,cat唯一做的就是把它的输入复制到它的输出,对吧?我真的不知道为什么会发生这种事,如果有人能告诉我为什么会发生,我会很高兴

以下是find . | wc:的输出

 246646  477986 25198490

谢谢。

find .的调用本身并不比find . | cat慢。当您将输出打印到stdout时,它只会更慢。当您将输出重定向到/dev/null(具体地说,调用find . > /dev/nullfind . | cat > /dev/null)时,您应该注意到使用| cat比不使用慢。

从这些结果中,我想到的唯一结论是,通过让cat运行一个单独的打印进程,find命令不会因为阻止打印到stdout而被搁置,而cat作为一个单独进程运行,因此当它被搁置打印到stdout时,find命令仍然在运行,实际上是在查找文件。

相关内容

最新更新