Получить количество открытых волокон в рубине
Как я могу получить текущее количество открытых волокон в 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