Выбор ответа Junior Event loop и libuv обновлено

Когда Node.js завершает процесс

Вопрос

Скрипт создал setInterval и больше ничего не делает. Когда завершится процесс?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Не завершится: таймер держит цикл до clearInterval. Node завершается, когда в цикле не осталось активных хэндлов и запросов.

Варианты ответа

  1. Не завершится: таймер держит цикл до clearIntervalправильный ответ
  2. После первого срабатывания интервала
  3. Сразу после выполнения синхронного кода
  4. Через 2 минуты по встроенному таймауту простоя

Разбор

Node завершается, когда в цикле не осталось активных хэндлов и запросов. Интервал это активный хэндл, поэтому процесс живёт. Отпустить его можно clearInterval(id) или id.unref(): тогда таймер не держит процесс.

  • Сразу процесс завершается, только если нет ни таймеров, ни серверов, ни незавершённого ввода-вывода.
  • Встроенного таймаута на время жизни процесса нет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме