一年前我在这里发布了完全相同的问题: Ruby Loop Failing in Thread
这里是代码(和上面的主题差不多)
class NewObject
def my_funk
t = Thread.new {
until false do
puts sleep 15 # sleeps way too much
end
}
t.join
end
end
if __FILE__ == $0
s = NewObject.new()
s.my_funk
end
这是输出:
15
42
36
38
33
45
42
33
32
40
代码基本上打印了实际 sleep 的秒数。 有谁知道这里发生了什么以及如何解决它?
我正在运行 Windows 7 和 Ruby 1.8.7
最佳答案
如果我没记错的话, sleep 是使用 native 系统调用实现的,并且可能会干扰由 VM 管理的 ruby 绿线程。这也可以解释为什么 JRuby 和 1.9 没有遇到同样的问题....
关于Ruby 在线程循环中休眠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3954676/