Получить количество открытых волокон в рубине

Как я могу получить текущее количество открытых волокон в ruby приложение? Мое приложение использует EventMachine Synchrony lib для обработки параллелизма. Во время поиска в Google я не нашел API, который бы его возвращал.

Например, если у меня есть этот кусок кода:

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

тогда как я могу узнать, сколько волокон работает? Без использования вручную counter++ и конечно без @some_arr.size,

1 ответ

Итак, было найдено 1 решение для этой проблемы:

Вы можете посчитать количество существующих объектов (всех типов) в рубине.

В нашем случае мы хотим подсчитать объекты типа / класса '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

Другие вопросы по тегам