我的目标是在使用尽可能少的 CPU 的情况下计算文件中的单词数。
我可以使用该wc
命令或为此编写一个简单的 perl 脚本,这两个选项中哪一个的 CPU 密集程度会较低?
答案1
我怀疑wc
会使用更少的 CPU 时间,它是用 C 编写的,并且随着时间的推移经过了仔细的优化。但是,没有理由不亲自测试一下。time
将使您可以将 Perl 脚本的性能与wc
.使用该time
命令,您应该得到如下输出:
> time wc /usr/share/dict/words
119095 119095 1145922 /usr/share/dict/words
wc /usr/share/dict/words 0.03s user 0.00s system 98% cpu 0.030 total
在本例中,wc
总共使用了 0.030 秒的 CPU 时间。
答案2
通常情况下,当尝试解决可以通过单个命令行工具(例如 )完全封装的问题时wc
,它们比其他任何工具都具有更高的性能。
只有当您必须开始将多个“命令”链接在一起时,将解决方案从将它们链接在一起过渡到使用 Perl、Python 或 Ruby 等高级语言解决问题才有意义。
将命令链接在一起的成本通常表现为必须多次重复执行简单工具。
答案3
我同意@wingedsubmariner,wc
几乎肯定会比你编写的任何 Perl 版本都快:
$ /usr/bin/time -f "%Uuser %Ssystem %Eelapsed %PCPU" wc /usr/share/dict/words
99171 99171 938848 /usr/share/dict/words
0.02user 0.00system 0:00.02elapsed 86%CPU
$ /usr/bin/time -f "%Uuser %Ssystem %Eelapsed %PCPU" \
perl -ane '$k+=$#F+1; END{print "$k\n"}' /usr/share/dict/words
99171
0.09user 0.00system 0:00.09elapsed 96%CPU