2017-08-31 84 views
0

如何獲得ruby應用程序中當前開放纖維的數量?我的應用程序使用EventMachine Synchrony庫進行併發處理。雖然使用谷歌搜索,我還沒有找到任何將返回它的API。獲取紅寶石中開放纖維的數量

例如,如果我有這樣的一段代碼:

EM::Synchrony::FiberIterator.new(@outputs, @outputs.size).each do |output| 
# some code goes here 
end 

那麼我怎麼才能知道有多少纖維有運行?沒有手動使用counter++,當然沒有@some_arr.size

回答

0

好了,1種溶液發現了這個問題:

你可以指望在紅寶石(所有種類)現有對象的數量。

在我們的例子中,我們要計算類型/類「光纖」的對象,所以我們使用ObjectSpace.each_object紅寶石API:

stats = {} 
stats["Fiber"] = 0 
ObjectSpace.each_object(Fiber) {|o| stats["Fiber"] += 1 if o.alive?} 

(我們只關心活着的纖維,這就是爲什麼使用alive? API)

對象空間以供參考: https://ruby-doc.org/core-1.9.3/ObjectSpace.html

纖維以供參考:https://ruby-doc.org/core-1.9.3/Fiber.html