Middle+
83
questionbank

Расскажите о механизме работы цикла событий (Event Loop) в Node.js.

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Event Loop позволяет Node.js выполнять неблокирующие операции ввода-вывода, несмотря на то, что JavaScript однопоточный. Он постоянно опрашивает очередь событий и выполняет колбэки.

Основные фазы Event Loop'а (в порядке исполнения):

  • timers: Выполняет колбэки для setTimeout() и setInterval().
  • pending callbacks: Обрабатывает операции, запланированные на следующую итерацию цикла.
  • idle, prepare: Используется внутренней логикой Node.js.
  • poll: Основная фаза. Ждет новых событий ввода-вывода, выполняет колбэки для них. При необходимости может блокироваться, если нет активных таймеров или setImmediate() колбэков.
  • check: Выполняет колбэки для setImmediate().
  • close callbacks: Обрабатывает колбэки закрытия, например, socket.on('close', ...).

После каждой фазы цикла событий Node.js проверяет микрозадачи:

  1. process.nextTick(): Колбэки, запланированные с помощью process.nextTick(), выполняются до любых других микрозадач или перехода к следующей фазе Event Loop'а.
  2. Promise callbacks: Колбэки промисов (.then(), .catch(), .finally()) и await выполняются после process.nextTick() и перед следующей фазой Event Loop'а.

Пример работы Event Loop:

javascript

Ожидаемый вывод:

plaintext

Event Loop управляется библиотекой libuv, которая предоставляет абстракцию над низкоуровневыми операциями ввода-вывода и механизмами планирования задач в операционной системе.