计算单词数:什么会使用更少的 CPU,wc 还是 perl 脚本?

计算单词数:什么会使用更少的 CPU,wc 还是 perl 脚本?

我的目标是在使用尽可能少的 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

相关内容