1

如何在ruby应用程序中获取当前的开放光纤数量?我的应用程序使用 EventMachine Synchrony 库进行并发处理。在谷歌搜索时,我没有找到任何可以返回它的 API。

例如,如果我有这段代码:

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

那我怎么知道有多少光纤在运行呢?无需手动使用counter++,当然也无需@some_arr.size.

4

1 回答 1

2

好的,因此针对此问题找到了 1 个解决方案:

您可以计算 ruby​​ 中现有对象(所有类型)的数量。

在我们的例子中,我们想要计算类型/类'Fiber'的对象,所以我们使用ObjectSpace.each_objectruby​​ API:

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

(我们只对活着的 Fibers 感兴趣,这就是使用alive?API 的原因)

ObjectSpace 供参考: https ://ruby-doc.org/core-1.9.3/ObjectSpace.html

参考纤维:https ://ruby-doc.org/core-1.9.3/Fiber.html

于 2017-09-04T14:44:18.217 回答