-
Notifications
You must be signed in to change notification settings - Fork 32
keita edited this page Sep 12, 2010
·
1 revision
TimeoutX は軽量な timeout 関数を提供する Ruby のライブラリです。 TimeoutX.timeout は標準的な Timeout.timeout の10倍くらい速いと思います。
sudo gem install timeoutx
require "timeoutx"
TimeoutX.timeout(1){ ... }
Timeout.timeout を TimeoutX.timeout に置き換えるには次のようにして下さい。
require "timeoutx"
TimeoutX.replace_timeout
Timeout.timeout(1){ ... }
2007/12/05 に下の例(examples/benchmark.rb)を使ってとったベンチマークの結果は次のようになります。
n = 100000
Benchmark.bmbm(10) do |x|
x.report("Timeout") { 1.upto(n) do ; Timeout.timeout(1){true}; end }
x.report("TimeoutX") { 1.upto(n) do ; TimeoutX.timeout(1){true}; end }
end
Rehearsal ---------------------------------------------
Timeout 5.960000 0.460000 6.420000 ( 6.521520)
TimeoutX 0.780000 0.050000 0.830000 ( 0.851778)
------------------------------------ total: 7.250000sec
user system total real
Timeout 5.650000 0.790000 6.440000 ( 6.516992)
TimeoutX 0.760000 0.080000 0.840000 ( 0.863438)
Rehearsal ---------------------------------------------
Timeout 12.140000 2.760000 14.900000 ( 15.333607)
TimeoutX 0.490000 0.010000 0.500000 ( 0.518974)
----------------------------------- total: 15.400000sec
user system total real
Timeout 11.210000 2.390000 13.600000 ( 14.337455)
TimeoutX 0.490000 0.010000 0.500000 ( 0.512449)
TimeoutX はカウントダウン用のループに一つのスレッドだけしか使いません。普通の timeout.rb は timeout 関数を呼び出すたびに新たなスレッドを作成します。従って例えば10,000回呼び出せば10,000個ものスレッドを生成してしまいます。TimeoutX ライブラリは短時間に timeout をたくさん呼び出す場合に役に立つものと思います。
TimeoutX は Ruby ライセンスに従って再配布や修正を行なうことが出来ます。