【问题标题】:Get amount of open fibers in ruby获取红宝石中开放纤维的数量
【发布时间】:2017-08-31 11:16:26
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ruby eventmachine fiber em-synchrony


    【解决方案1】:

    好的,所以针对这个问题找到了 1 个解决方案:

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

    在我们的例子中,我们想要计算类型/类'Fiber'的对象,所以我们使用ObjectSpace.each_object ruby​​ 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      相关资源
      最近更新 更多