« 浜松駅にて奥華子さんが路上ライブ | Main | ゴッホは欺く/ジェフリー・アーチャー »

一手間加えるだけで

JavaとCの実行速度 (reconpile.net)

自家製のプログラムを題材に、JavaとCの速度比較をしてみました。アクセスログからトップへのアクセスだけを切り出すという処理です。

(中略)

まずは、単純にgrepをかけてみましょう。

% time grep 'GET /[ ?]' access_log > /dev/null
grep 'GET /[ ?]' access_log > /dev/null  1219.31s user 7.65s system 99% cpu 20:33.59 total

さすがに8.9Gのファイルを相手にすると時間がかかります。

この後、JavaとCで同様の処理をするソースと、実行結果が示されます。それはこのエントリを見てもらうとして、最後にこんなことが

Rubyで書いてもみました。

#!/usr/bin/ruby

REGEXP = /GET \/[ ?]/

STDIN.each do |l|
  print l if REGEXP === l
end
% time ruby mygrep.rb < access_log > /dev/null
ruby mygrep.rb < access_log > /dev/null  95.02s user 7.98s system 49%

うわ、このケースだとRubyってJavaよりも速い……。

えっと、これってつまり

% grep 'GET /[ ?]' access_log

って書くかわりに

% ruby -ne 'print $_ if /GET \/[ ?]/' < access_log 

って書いたら、12倍早かったってことですよね。

大きなファイルをgrepすることって日常の場面でけっこうあるものですけど、これは頭の片隅に入れておくといいかもしれない情報ですな

|

« 浜松駅にて奥華子さんが路上ライブ | Main | ゴッホは欺く/ジェフリー・アーチャー »

パソコン・インターネット」カテゴリの記事

Comments

もともとのgrepが遅いのはシェルのせいかな、と直感的におもうんだけれど。grepのコードみてみるかぁ?
PythonとかPerlとかでも実験してみる価値はありますなぁ。

Posted by: nac | July 28, 2007 07:45 PM

まあ、そうなんだけどね。もしかしたらregexp.cが速いのかもしんまい?

Posted by: Tambourine | July 28, 2007 08:33 PM

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack


Listed below are links to weblogs that reference 一手間加えるだけで:

« 浜松駅にて奥華子さんが路上ライブ | Main | ゴッホは欺く/ジェフリー・アーチャー »