Как ev_timer реализован в libev, используемом nodejs

setTimeout в nodejs реализован с помощью библиотеки языка c libev ev_timer. Как работает ev_timer?

Это реализовано с помощью опроса? Если я установил тайм-аут в 30 секунд, проверяет ли какой-либо процесс каждые миллисекунды на время ожидания?

1 ответ

Либев был заменен на libuv.

API таймера иллюстрируется здесь

По сути, цикл обработки событий выполняет опрос после завершения всех других операций, не связанных с вводом-выводом, в системе. В настоящий момент он будет иметь одно или несколько ожидающих событий ввода-вывода и одно или несколько событий таймера, среди прочего. Входные данные для опроса составлены таким образом, что время ожидания является наименьшим среди зарегистрированных временных событий. Это в сочетании с полем относительного времени, которое поддерживает цикл событий, помогает определить правильное время для обратного вызова таймера.

Короче говоря, время ожидания делегируется ОС через вызов опроса, а не посредством регулярного пробуждения и повторной проверки.

Надеюсь это поможет.

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