作者godfat (godfat 真常)
看板Ruby
标题Re: [心得] Generator 与 Continuation
时间Thu Mar 1 22:27:13 2007
跑个测试程式,测试程式如下:
require 'test/unit'
require 'benchmark'
class TC_Generator < Test::Unit::TestCase
def test_benchmark
Benchmark.bmbm{|b|
test = lambda{|klass|
atest_block1 klass
atest_block2 klass
atest_each klass
}
b.report('orig'){
50.times{ test.call Generator }
}
b.report('hack'){
50.times{ test.call MyGenerator }
}
}
end
end
其中的 atest_ 开头的 method 定义是放在 generator.rb 里的那些,
我在开头多加了个 a 以避免去跑那些测试,全部拉到 test_benchmark 里测试。
测试连续呼叫五十次这些 method, 哪个 Generator 比较快?
在我的小电脑上,跑起来的结果是:
Loaded suite ./perform
Started
Rehearsal ----------------------------------------
orig 1.382000 0.070000 1.452000 ( 1.462000)
hack 0.951000 0.200000 1.151000 ( 1.171000)
------------------------------- total: 2.603000sec
user system total real
orig 0.891000 0.030000 0.921000 ( 0.942000)
hack 0.591000 0.000000 0.591000 ( 0.591000)
.
Finished in 4.676 seconds.
1 tests, 10800 assertions, 0 failures, 0 errors
第一个 Rehearsal 的结果可以不用看,那个不太准…。
虽然我一直不太懂分这麽多时间到底是什麽意思…?
不过看起来应该是有快上一些吧。
之所以会贴这篇是因为,刚刚在 ruby-talk 上看到这个问题
已经变成 RubyQuiz 了 O_o
看来 gernerator 的慢早就被很多人看不爽了…。
那边有很多人贴他的结果,我懒得一一测了,所以只测自己的。
其中有不遵守 lazy 原则的,直接用 array, 这样不公平啦。
还有人用 Thread 来做…感觉用 Thread 来做应该不错,
不过暂时懒得试试看。
另外是听说官方有正式推出比较快的实作,也许会包在下个版本里。
--
『风车』が廻り続ける度に 『美しき』幻想が静かに纺がれ
『焔』の揺らめきの外に 『腕』を伸ばす愚かな者达 -《Roman》5th Story
『宝石』をより多く掴もうと 『朝と夜』の狭间を彷徨い続ける Track 10
『星屑』の砂の煌めきにも 『葡萄酒』の仄甘い陶酔を魅せ 黄昏の贤者
『贤者』が忌避する槛の中から 『伝言』の真意を彼等に问うだろう
『天使』が别れを告げし时 『地平线』は第五の物语を识る
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.58.12