2017-08-31 55 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