Получить количество (активных) таймеров в цикле событий Node.js

Есть ли способ сделать вызов в Node.js, чтобы определить количество таймеров в очереди цикла событий? У меня есть библиотека с несколькими тайм-аутами, и вместо того, чтобы отслеживать их самостоятельно, используя какую-то внутреннюю систему бухгалтерии, было бы неплохо, если бы я мог просто спросить V8, Libuv или что-то еще, сколько существует таймеров.

Это возможно?

1 ответ

было бы хорошо, если бы я мог просто спросить V8 или Libuv или что-то еще

Вы не можете напрямую спросить libuv, но он определенно предлагает способ узнать, сколько активных таймеров есть.
Для этого вы можете вызвать uv_walk с действительным циклом, чтобы получить все активные маркеры. Затем вы можете проверить каждый дескриптор с заданным обратным вызовом и сосчитать те, для которых член данных type (это имеет тип uv_handle_type) равно UV_TIMER,
Результатом является количество активных таймеров.

См. Документацию для получения дополнительной информации о структуре данных дескриптора.


В качестве тривиального примера рассмотрим следующую структуру:

struct Counter {
    static int count;

    static void callback(uv_handle_t* handle, void*) {
        if(handle.type == uv_handle_type::UV_TIMER) count++;
    }
};

Вы можете использовать его следующим образом:

Counter::count = 0;
uv_walk(my_loop_ptr, &Counter::callback);
// Counter::count indicates how many active timers are running on the loop

Конечно, это не готовый к использованию код. Во всяком случае, я надеюсь, что это дает представление о предлагаемом решении.


Смотрите здесь для документации libuv.

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