Ruby 在线程循环中休眠

标签 ruby multithreading loops sleep

一年前我在这里发布了完全相同的问题: 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/

相关文章:

ruby - 从 ruby​​ block 更改原始变量?

ruby - 如何在 irb 中使用 RSpec 期望

java - 在多个线程上同步 var 实例化

c# - 遍历单词列表并搜索文件夹以查找包含该单词的文件

SQL Server,将具有多行html代码的文本解析为表格

php - 根据上一行的日期获取下一行的内容

javascript - 调用 javascript 中嵌入的不同参数的 ruby​​ 方法

ruby - 如果字符串不为空,则连接该字符串

c# - 秒表与 Task.Wait

c++ - 列出线程 C++