Re: [心得] Generator 與 Continuation

看板Ruby作者 (godfat 真常)時間17年前 (2007/03/01 22:27), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
跑個測試程式,測試程式如下: 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
文章代碼(AID): #15vkB6TM (Ruby)
文章代碼(AID): #15vkB6TM (Ruby)