Ruby无限循环导致100%的cpu负载

Ruby无限循环导致100%的cpu负载,ruby,curses,Ruby,Curses,我实现了一些在循环中运行的代码: loop do .. end 在这个循环中,我用诅咒库处理按键。如果我按N键并输入一些内容,我将启动一个新线程,该线程计算循环执行的时间。。再次结束 问题是,为什么循环或while true会导致其中一个cpu核上的cpu负载达到100%?问题真的在循环中吗 在ruby中,有没有一种方法可以以更低的cpu消耗完成无限循环 可获得的全部资料来源 UPD-战略 经过用户2246674的思考和建议,我终于解决了这个问题。它不在线程内部,而是主循环 我在主循环中

我实现了一些在循环中运行的代码:

loop do
   ..
end
在这个循环中,我用诅咒库处理按键。如果我按N键并输入一些内容,我将启动一个新线程,该线程计算循环执行的时间。。再次结束

问题是,为什么循环或while true会导致其中一个cpu核上的cpu负载达到100%?问题真的在循环中吗

在ruby中,有没有一种方法可以以更低的cpu消耗完成无限循环

可获得的全部资料来源

UPD-战略


经过用户2246674的思考和建议,我终于解决了这个问题。它不在线程内部,而是主循环

我在主循环中有这样的代码:

  c = Curses.getch
  unless c.nil? 
     # input handling

将睡眠1添加到else后,问题得到解决。当没有来自Curses的输入时,它什么也不做,然后在一秒钟内再次检查,这会阻止它主动轮询STDIN并生成高CPU负载

为什么它不使用100%的CPU?没有理由不去尝试——如果这真的是在做一些非常重要的工作呢?为了避免占用CPU,线程被删除。一个简单的sleep0就足够了。Thread中已经有Sleep1作为循环逻辑的一部分。可能在某个地方有一个繁忙的循环,例如,在一个生成的线程中,这个循环不太好。我添加了strace输出-它可能是主循环中的Curses.getch吗?
  c = Curses.getch
  unless c.nil? 
     # input handling