我刚刚发现,执行find .
比执行find . | cat
要慢。以下是在我的主目录中执行time find .
3次的结果:
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
感谢。
答案 0 :(得分:3)
对find .
的调用本身并不比find . | cat
慢。将输出打印到stdout时速度会慢一些。
当您将输出重定向到/dev/null
(特别是调用find . > /dev/null
和find . | cat > /dev/null
)时,您应该注意到| cat
比没有更慢。
从这些结果中我想到的唯一结论是,通过让cat运行单独的打印过程,find
命令不会被阻止打印到stdout
,而cat
作为一个单独的进程运行,因此当它被阻止打印到stdout
时,find命令仍在运行,实际上正在查找文件。