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

Tom*_*sen 11 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
Run Code Online (Sandbox Code Playgroud)

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

def running_thread_count
 return Thread.list.count
end
Run Code Online (Sandbox Code Playgroud)

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

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

Kas*_*yap 20

这将给出状态为"run"而不是"sleep"的线程数

def running_thread_count
  Thread.list.select {|thread| thread.status == "run"}.count
end
Run Code Online (Sandbox Code Playgroud)