[問題] 關於Thread

看板Ruby作者 (郭大維老師大好人)時間17年前 (2007/11/01 10:09), 編輯推噓8(805)
留言13則, 5人參與, 最新討論串1/3 (看更多)
環境: ruby 1.8.6 (2007-06-07 patchlevel 36) [i486-linux] 狀況: 爬文得知ruby沒有native thread,但必須做類似下列的工作, 卻發生非預期性的結果 附錄: a = 0 start = Time.new t = Thread.new{ while a < 10000000 a += 1 end } while(a < 5000000) #p a end puts Time.new - start #a >= 5000000後的code 輸出的結果大約是6.2秒 但若將第二個迴圈內的註解拿掉 也就是改成 while(a < 5000000) p a end 其他維持原狀 輸出的結果竟然是3.2秒 反而快了3秒!? 有什麼合理的解釋嗎? 因為希望等到a >= 5000000後再繼續執行下面的工作 所以才讓他跑空迴圈... 該怎麼改能更有效率的達到上述要求? 小弟是ruby新手 請不吝賜教 感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.109.23.118 ※ 編輯: wwwc 來自: 140.109.23.118 (11/01 10:09)

11/01 10:17, , 1F
哇,這不是一成兄嗎
11/01 10:17, 1F

11/01 10:21, , 2F
喔喔 樓上高手也在用ruby啊 幫我解答一下 XD
11/01 10:21, 2F

11/01 12:33, , 3F
這個作法似乎有點詭異 @_@ 何不 join?
11/01 12:33, 3F

11/01 12:37, , 4F
至於執行時間...不懂,puts 好像就正常,p 怪怪的
11/01 12:37, 4F

11/01 13:11, , 5F
puts確實是正常的 但是為何改成p能省下3秒?
11/01 13:11, 5F

11/01 13:55, , 6F
p是呼叫obj.inspect puts是呼叫obj.to_s 大概差在這吧
11/01 13:55, 6F

11/01 14:58, , 7F
puts a.inspect 也正常,差別應該在實作。晚點會檢查 src
11/01 14:58, 7F

11/01 15:51, , 8F
我猜是因為CPU被空迴圈吃掉了..所以沒空去執行Thread
11/01 15:51, 8F

11/01 15:52, , 9F
可以看一下CPU的百分比
11/01 15:52, 9F

11/01 17:46, , 10F
我大概猜到為什麼了,沒錯,跟 CPU 有關,p 的內部可能有
11/01 17:46, 10F

11/01 17:46, , 11F
cache 和 sleep, 上面的 p a 改成 sleep 0 會最快
11/01 17:46, 11F

11/01 17:47, , 12F
既然如此我也懶得翻 src 了...
11/01 17:47, 12F

11/01 17:56, , 13F
謝謝各位的回答!
11/01 17:56, 13F
文章代碼(AID): #17AJK-gY (Ruby)
討論串 (同標題文章)
以下文章回應了本文
完整討論串 (本文為第 1 之 3 篇):
8
13
文章代碼(AID): #17AJK-gY (Ruby)