私の目標は、できるだけ少ないCPUを使用しながら、ファイル内の単語数を数えることです。
このwc
コマンドを使用するか、この目的のために単純なPerlスクリプトを作成できます。これら2つのオプションのうち、CPUを使用しないオプションは何ですか?
答え1
CPU時間が少なくなると予想されますwc
。 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