😎 Event Loop в Node.js
Event Loop — это сердце всей асинхронности: он решает, когда выполнять твой код, когда обрабатывать коллбеки и когда отдавать управление дальше. За последовательность выполнения отвечают фазы эвент лупа
🙂 Фазы event loop
1) Timers
Сюда попадают коллбеки setTimeout и setInterval. Но! Выполняются они не строго по миллисекундам, а когда цикл доберётся до этой фазы
2) Pending callbacks
Выполняются отложенные системные коллбеки (например, ошибки из сетевых операций)
3) Idle, prepare
Внутренние операции, используемые самой платформой Node.js
4) Poll
Самая важная фаза: тут обрабатываются новые I/O события (сокеты, файлы, сетевые запросы). Если работы нет — Node может подождать
5) Check
Фаза для setImmediate. Все такие коллбеки выполняются именно тут, сразу после poll
6) Close callbacks
Закрытия соединений (socket.on('close') и т.п.)
⸻
🍴 Microtasks: process.nextTick & Promises
Есть ещё «микрозадачи», которые выполняются между фазами
1) process.nextTick — выполняется даже раньше, чем промисы
2) Промисы (.then/.catch/finally) — выполняются сразу после текущей операции, до перехода к следующей фазе.
😱 setTimeout vs setImmediate
Иногда спрашивают: «Что быстрее — setTimeout(..., 0) или setImmediate?»
— setTimeout(..., 0) попадает в фазу timers, то есть выполнится на следующем проходе цикла
— setImmediate идёт в фазу check, сразу после poll
На практике setImmediate обычно срабатывает раньше, особенно после I/O операций
🚀 Пост Guru Node.js: @DemetraIT
Post #396
161
- ❤ 4
- 🏆 3
- 🔥 2