Как ev_timer реализован в libev, используемом nodejs
setTimeout в nodejs реализован с помощью библиотеки языка c libev ev_timer. Как работает ev_timer?
Это реализовано с помощью опроса? Если я установил тайм-аут в 30 секунд, проверяет ли какой-либо процесс каждые миллисекунды на время ожидания?
1 ответ
Либев был заменен на libuv.
API таймера иллюстрируется здесь
По сути, цикл обработки событий выполняет опрос после завершения всех других операций, не связанных с вводом-выводом, в системе. В настоящий момент он будет иметь одно или несколько ожидающих событий ввода-вывода и одно или несколько событий таймера, среди прочего. Входные данные для опроса составлены таким образом, что время ожидания является наименьшим среди зарегистрированных временных событий. Это в сочетании с полем относительного времени, которое поддерживает цикл событий, помогает определить правильное время для обратного вызова таймера.
Короче говоря, время ожидания делегируется ОС через вызов опроса, а не посредством регулярного пробуждения и повторной проверки.
Надеюсь это поможет.