【发布时间】:2012-05-24 13:00:29
【问题描述】:
我想在 Sinatra Web 服务器的线程中执行“长时间运行”(执行大约需要 0.5 秒)任务。
网络响应大约需要 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 ,因为这会破坏目的 - 除非我们有大量线程在工作,否则会快速返回。
【问题讨论】:
-
但是没有
join,如果其中一个线程完成执行,所有线程都会退出。Thread.list.count获取当前正在运行的线程数。Thread有一个名为status的方法,它为正在处理的线程返回"sleep"或"run"。我已添加代码作为答案。 -
我以为作为 web 服务器运行的 ruby 程序一直在运行,所以在 web 请求期间启动的线程会运行完成?
-
你说得有道理。将进行更多实验。谢谢
标签: ruby multithreading sinatra