Назад к вопросам
Middle+
131
questionbank
Какие существуют сценарии реализации работы Event Loop в Node.js?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Event Loop в Node.js работает в итерациях (тиках) и обрабатывает следующие фазы:
- Timers: обрабатывает колбэки
setTimeout()иsetInterval(). - Pending callbacks: выполняет колбэки I/O операций, отложенные в предыдущей итерации.
- Idle, prepare: внутреннее использование Node.js.
- Poll:
- Выполняет колбэки I/O (в большинстве случаев).
- Если нет готовых к выполнению I/O колбэков, может ждать новых соединений/событий или переходить к фазе Check.
- Check: выполняет колбэки
setImmediate(). - Close callbacks: выполняет колбэки закрытия, например, для сокетов (
'close').
Между основными фазами Event Loop, а также после выполнения каждой фазы, Node.js проверяет и выполняет следующие очереди микрозадач:
process.nextTick()queue: имеет наивысший приоритет и выполняется перед всеми другими микрозадачами и фазами Event Loop.- Promise queue: выполняет resolved промисы.
Пример:
// Выполняется перед setTimeout, setImmediate и I/O колбэками
process.nextTick(() => {
console.log('nextTick');
});
// Выполняется в фазе Timers
setTimeout(() => {
console.log('timeout');
}, 0);
// Выполняется в фазе Check
setImmediate(() => {
console.log('immediate');
});
// Пример асинхронной I/O операции
const fs = require('fs');
fs.readFile(__filename, () => {
// Выполняется в фазе Poll
console.log('read file');
});
// Пример промиса
Promise.resolve().then(() => {
// Выполняется в очереди промисов
console.log('promise');
});
Порядок вывода в консоль будет примерно таким:
nextTick
promise
timeout
read file
immediate
(порядок read file и immediate может меняться в зависимости от выполнения I/O операции).