10
我想在Sinatra Web服務器的線程中執行'長時間運行' - (需要大約0.5秒的時間執行)任務。如何統計ruby服務器中的運行線程
該網站的響應時間爲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',所有如果其中一人完成執行線程退出。 'Thread.list.count'獲取當前正在運行的線程數。 'Thread'有一個名爲'status'的方法,它爲正在處理的線程返回''sleep''或''run''。我已經添加了代碼作爲答案。 – Kashyap
我認爲作爲Web服務器運行的ruby程序一直在運行,以便在Web請求期間啓動的線程運行至完成狀態? –
你有一個點。將實驗更多。謝謝 – Kashyap