Ruby中的计时器性能

我正在寻找一个在ruby中演示计时器的在线示例,并且遇到了下面的代码。 它按预期工作,但这个简单的程序使用30Mo的内存(如Windows任务管理器中所示)和太多的CPU是否有意义?

非常感谢

def time_block start_time = Time.now Thread.new { yield } Time.now - start_time end def repeat_every(seconds) while true do time_spent = time_block { yield } # To handle -ve sleep interaval sleep(seconds - time_spent) if time_spent < seconds end end repeat_every(5) { } 

正如对问题的评论中所指出的,使其工作所需的只是你加入线程:

 #!/usr/bin/ruby1.8 def repeat_every(interval, &block) loop do start_time = Time.now Thread.new(&block).join elapsed = Time.now - start_time sleep([interval - elapsed, 0].max) end end repeat_every(5) do puts Time.now.to_i end # => 1266437822 # => 1266437827 # => 1266437832 ... 

但是,就其而言,没有理由在问题中使用线程代码:

 def repeat_every(interval) loop do start_time = Time.now yield elapsed = Time.now - start_time sleep([interval - elapsed, 0].max) end end repeat_every(5) do puts Time.now.to_i end # => 1266437911 # => 1266437916 # => 1266437921 

现在,如果您想要的是一个间隔执行某些操作的线程,以便主程序可以执行其他操作,那么您将整个循环包装在一个线程中。

 def repeat_every(interval) Thread.new do loop do start_time = Time.now yield elapsed = Time.now - start_time sleep([interval - elapsed, 0].max) end end end thread = repeat_every(5) do puts Time.now.to_i end puts "Doing other stuff..." thread.join # => 1266438037 # => Doing other stuff... # => 1266438042 # => 1266438047