Рубиновый сон в петле в потоке - PullRequest
3 голосов
/ 17 октября 2010

У меня точно такая же проблема, опубликованная здесь год назад: Сбой в Ruby Loop в теме

Здесь код (почти такой же, как в теме выше)

 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

Код в основном печатает фактическое количество спящих секунд.Кто-нибудь знает, что здесь происходит и как это исправить?

У меня Windows 7 и Ruby 1.8.7

1 Ответ

0 голосов
/ 06 сентября 2011

Если я не ошибаюсь, спящий режим реализован с использованием собственного системного вызова и, вероятно, мешает рубиновым зеленым потокам, которые управляются виртуальной машиной. Это также объясняет, почему JRuby и 1.9 не страдают от одной и той же проблемы ....

...