作者wwwc (郭大维老师大好人)
看板Ruby
标题[问题] 关於Thread
时间Thu Nov 1 10:08:59 2007
环境:
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)
1F:推 yllan:哇,这不是一成兄吗 11/01 10:17
2F:推 wwwc:喔喔 楼上高手也在用ruby啊 帮我解答一下 XD 11/01 10:21
3F:推 godfat:这个作法似乎有点诡异 @_@ 何不 join? 11/01 12:33
4F:→ godfat:至於执行时间...不懂,puts 好像就正常,p 怪怪的 11/01 12:37
5F:推 wwwc:puts确实是正常的 但是为何改成p能省下3秒? 11/01 13:11
6F:→ poga:p是呼叫obj.inspect puts是呼叫obj.to_s 大概差在这吧 11/01 13:55
7F:推 godfat:puts a.inspect 也正常,差别应该在实作。晚点会检查 src 11/01 14:58
8F:推 shelary:我猜是因为CPU被空回圈吃掉了..所以没空去执行Thread 11/01 15:51
9F:→ shelary:可以看一下CPU的百分比 11/01 15:52
10F:推 godfat:我大概猜到为什麽了,没错,跟 CPU 有关,p 的内部可能有 11/01 17:46
11F:→ godfat:cache 和 sleep, 上面的 p a 改成 sleep 0 会最快 11/01 17:46
12F:→ godfat:既然如此我也懒得翻 src 了... 11/01 17:47
13F:推 wwwc:谢谢各位的回答! 11/01 17:56