2009-09-01
例外捕捉モジュール Try::Tiny のベンチマーク
Yuval Kogman 氏が Try::Tiny という新しい例外捕捉モジュールをリリースしたようなので、ベンチマークを取ってみました。
ベンチマークコードは、Error.pm のオーバーヘッドで書いたものを流用しました。
ベンチマークコード
#!/usr/bin/perl use strict; use warnings; use Benchmark qw(:all); use Try::Tiny; use Error; cmpthese(timethese(100000, { 'eval' => sub { _eval(\&die_with_object); _eval(\&die_with_string); _eval(\&dont_die); }, 'try' => sub { _tiny(\&die_with_object); _tiny(\&die_with_string); _tiny(\&dont_die); }, })); sub die_with_object { Error::Simple->throw('object'); } sub die_with_string { die 'string'; } sub dont_die { return "still alive\n"; } sub _eval { my $code = shift; my $res; eval { $res = $code->(); }; if (ref $@ eq 'Error::Simple') { $res = $@->stacktrace; } elsif ($@) { $res = $@; } return $res; } sub _tiny { my $code = shift; my $res; try { $res = $code->(); } catch { if (ref $@ eq 'Error::Simple') { $res = $@->stacktrace; } elsif ($@) { $res = $@; } }; return $res; }
ベンチマーク結果
Benchmark: timing 100000 iterations of eval, try... eval: 11 wallclock secs (10.52 usr + 0.00 sys = 10.52 CPU) @ 9505.70/s (n=100000) try: 19 wallclock secs (18.57 usr + 0.01 sys = 18.58 CPU) @ 5382.13/s (n=100000) Rate try eval try 5382/s -- -43% eval 9506/s 77% --
結論
Error より速いですが、オブジェクトごとに with で補足したりはできないので、やはり eval と if で良い気がします。
コメントを書く
トラックバック - http://d.hatena.ne.jp/Craftworks/20090901/1251790854
リンク元
- 22 http://www.google.co.jp/url?sa=t&rct=j&q=try::tiny&source=web&cd=4&ved=0CD0QFjAD&url=http://d.hatena.ne.jp/Craftworks/20090901/1251790854&ei=gKu8TtPKMsqRiQeJ4dSTBQ&usg=AFQjCNHHgzAkimoUBhBBEXt30hFUkFIrlw&sig2=iTsfpxgcCaMNKnXAh_QAow&cad=rja
- 14 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0CEEQFjAC&url=http://d.hatena.ne.jp/Craftworks/20090901/1251790854&ei=AsdqT__-JKLYmAWm64GuBg&usg=AFQjCNHHgzAkimoUBhBBEXt30hFUkFIrlw
- 14 https://www.google.co.jp/
- 10 http://www.google.co.jp/search?q=Try::Tiny&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja-JP-mac:official&hl=ja&client=firefox-a
- 9 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&ved=0CEMQFjAD&url=http://d.hatena.ne.jp/Craftworks/20090901/1251790854&ei=GhZrT6GrKOnOmAX949G6Bg&usg=AFQjCNHHgzAkimoUBhBBEXt30hFUkFIrlw&sig2=iqEWd-QtCWDI66v24kSZ3Q
- 6 http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=Try::Tiny
- 5 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCoQFjAA&url=http://d.hatena.ne.jp/Craftworks/20090901/1251790854&ei=iL9qT-61OKrumAWH_bmQBg&usg=AFQjCNHHgzAkimoUBhBBEXt30hFUkFIrlw&sig2=gmyp76TJLSHa5NFCDh2hTA
- 5 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CD0QFjAB&url=http://d.hatena.ne.jp/Craftworks/20090901/1251790854&ei=RGaRT7LxI8yimQWYwYHdAQ&usg=AFQjCNHHgzAkimoUBhBBEXt30hFUkFIrlw&sig2=n5BqRkXN5jw9rJE8tgB3lg
- 4 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja-JP-mac:official&hs=Q0U&q=setuidgid+fastcgi&btnG=検索&lr=lang_ja
- 4 http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=perl+Try::Tiny


