获得红宝石中的开纤维量

时间:2017-08-31 11:16:27

标签: ruby eventmachine fiber em-synchrony

如何在File outputFile = new File(System.getProperty("user.home"),"output.pdf"); PdfDocument pdfDocument = new PdfDocument(new PdfWriter(outputFile)); Document layoutDocument = new Document(pdfDocument); if(some_condition) { layoutDocument.add(new Paragraph("Lorem Ipsum Dolor Sit Amet")); } layoutDocument.add(new Paragraph("Never gonna give you up. Never gonna let you down.")); 应用程序中获取当前数量的开放光纤?我的应用程序使用EventMachine Synchrony lib进行并发处理。谷歌搜索时,我没有找到任何可以返回它的API。

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

ruby

然后我怎么知道有多少纤维在运行?无需手动使用EM::Synchrony::FiberIterator.new(@outputs, @outputs.size).each do |output| # some code goes here end ,当然也不使用counter++

1 个答案:

答案 0 :(得分:1)

好的,因此找到了解决此问题的解决方案:

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

在我们的例子中,我们想要计算类型/类' Fiber' 的对象,因此我们使用ObjectSpace.each_object ruby​​ API:

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

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

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

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