Найти в Дзене
Кодовые решения

♻️ Event Loop в Node.js — объясняю на кофе, а не на схемах

Представьте: вы приходите в кофейню.
Бариста (один!) принимает заказы от 10 человек подряд — не готовя ни одного кофе.
Потом бросается к кофемашине, делает эспрессо, отдаёт первому, сразу включает капучинатор, отдаёт второму — и так далее. Никто не ждёт. Все довольны. А бариста — всего один. Это и есть Event Loop в Node.js. ❓ Почему это важно? Потому что Node.js — однопоточный.
Но при этом легко обрабатывает тысячи запросов одновременно.
Как? Благодаря Event Loop + неблокирующим операциям. Если вы не понимаете, как это работает — вы: пишете async/await «по шаблону», не зная, зачем, иногда ломаете производительность синхронным кодом, не понимаете, почему setTimeout не всегда выполняется «точно вовремя». Исправляем это за 5 минут. 🔁 Как устроен Event Loop? (без воды) Event Loop — это цикл из 6 фаз, но вам важны только 3: Timers — выполняет setTimeout, setInterval. Poll — получает новые I/O-события (например, ответ от БД, файл прочитан). Check — выполняет setImmediate. 💡 Главное прави
Оглавление

Представьте: вы приходите в кофейню.
Бариста (один!) принимает заказы от 10 человек подряд —
не готовя ни одного кофе.
Потом бросается к кофемашине, делает эспрессо, отдаёт первому, сразу включает капучинатор, отдаёт второму — и так далее.

Никто не ждёт. Все довольны. А бариста — всего один.

Это и есть Event Loop в Node.js.

❓ Почему это важно?

Потому что Node.js — однопоточный.
Но при этом легко обрабатывает
тысячи запросов одновременно.
Как? Благодаря
Event Loop + неблокирующим операциям.

Если вы не понимаете, как это работает — вы:

  • пишете async/await «по шаблону», не зная, зачем,
  • иногда ломаете производительность синхронным кодом,
  • не понимаете, почему setTimeout не всегда выполняется «точно вовремя».

Исправляем это за 5 минут.

🔁 Как устроен Event Loop? (без воды)

Event Loop — это цикл из 6 фаз, но вам важны только 3:

  1. Timers — выполняет setTimeout, setInterval.
  2. Poll — получает новые I/O-события (например, ответ от БД, файл прочитан).
  3. Check — выполняет setImmediate.
💡 Главное правило:
Синхронный код — блокирует весь цикл.
Асинхронный — откладывается и выполняется позже.

🧪 Пример, который всё прояснит

-2

Какой будет порядок вывода?

✅ Правильный ответ:
1 → 4 → 3 → 2

Почем?

  • 1 и 4 — синхронные → сразу.
  • Promise.then — попадает в микрозадачи (microtasks) → выполняются до следующей фазы Event Loop.
  • setTimeout — попадает в Timers → только на следующем цикле.
Это ключевое различие, которое ломает мозг 90% начинающих.

⚠️ Опасная ошибка: «тяжёлые» синхронные операции

-3

Пока файл читается — весь сервер «завис». Никакие другие запросы не обрабатываются.

✅ Правильно — всегда асинхронно:

-4

Теперь Event Loop свободен — может обрабатывать другие запросы, пока ждёт диск.

💡 Когда Event Loop «тормозит»?

Если у вас:

  • Много синхронных вычислений (парсинг, криптография, циклы на миллионы итераций),
  • «Забытые» колбэки без обработки ошибок,
  • Утечки памяти через глобальные переменные.

→ Сервер не падает, но перестаёт отвечать быстро.

Решение:

  • Выносите тяжёлые задачи в worker_threads.
  • Используйте мониторинг (например, clinic.js или 0x).

❓ Зачем это знать в 2025 году?

Потому что Node.js — не «просто JS на сервере».
Это
асинхронная машина реального времени.
И если вы понимаете Event Loop — вы пишете:

  • быстрые API,
  • стабильные микросервисы,
  • безопасные приложения, которые не «замораживаются» при нагрузке.

💬 А вы уже разбирались с Event Loop?

  • Сталкивались с «зависанием» сервера без ошибок?
  • Знали, почему Promise быстрее setTimeout?

Пишите в комментариях!
Сохраните пост — он пригодится, когда придётся отлаживать «странное поведение» в продакшене.

🔔 P.S. Подписывайтесь — следующая статья: «Как не убить Node.js-сервер за 3 строчки кода» (реальные кейсы из продакшена).

📌 Теги для Дзена:

#NodeJS #JavaScript #EventLoop #ВебРазработка #Backend #Программирование #JS2025 #Асинхронность #ДляНачинающих #Разработчик