Выбор ответа Junior Event loop и libuv обновлено
Когда Node.js завершает процесс
Вопрос
Скрипт создал setInterval и больше ничего не делает. Когда завершится процесс?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Не завершится: таймер держит цикл до clearInterval. Node завершается, когда в цикле не осталось активных хэндлов и запросов.
Варианты ответа
- Не завершится: таймер держит цикл до
clearIntervalправильный ответ - После первого срабатывания интервала
- Сразу после выполнения синхронного кода
- Через 2 минуты по встроенному таймауту простоя
Разбор
Node завершается, когда в цикле не осталось активных хэндлов и запросов. Интервал это активный хэндл, поэтому процесс живёт. Отпустить его можно clearInterval(id) или id.unref(): тогда таймер не держит процесс.
- Сразу процесс завершается, только если нет ни таймеров, ни серверов, ни незавершённого ввода-вывода.
- Встроенного таймаута на время жизни процесса нет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Event loop и libuv»
- Тяжёлый цикл без блокировки event loop
- Код-ревью: что блокирует event loop
- Что блокирует event loop
- Объясни event loop в Node.js
- setImmediate и setTimeout внутри I/O
- setTimeout(0) против setImmediate на верхнем уровне
- Что такое libuv
- Рекурсивный process.nextTick