如何计算ruby服务器中的运行线程

时间:2012-05-23 23:52:03

标签: ruby multithreading sinatra

我想在Sinatra Web服务器的一个线程中执行'长时间运行' - (执行大约0.5秒)任务。

Web响应大约需要20毫秒,所以如果我忙,那么线程就会堆积起来......

所以我觉得如果我忙的话我会同步...

if (running_thread_count > 10)
    stuff_that_takes_a_second()
else
    Thread.new do
        stuff_that_takes_a_second()
    end
end

如何获得正在运行的线程数(我想要启动的线程数,还没有运行) - 你如何编写running_thread_count?

def running_thread_count
 return Thread.list.count
end

或者我是否需要检查正在运行的线程?即当一个线程完成运行时,它是否会停止回到Thread.list中?

我不想调用join,因为这会破坏目的 - 除非我们备份大量的线程,否则很快就会返回。

1 个答案:

答案 0 :(得分:19)

这将给出状态为“run”而不是“sleep”

的线程数
def running_thread_count
  Thread.list.select {|thread| thread.status == "run"}.count
end