Middle+
Чӣ тавр кор мекунад даврзании ҳодисаҳо (Event Loop) дар Node.js?
sobes.tech AI
Ҷавоб аз AI
Event Loop — это механизм, который позволяет Node.js выполнять неблокирующие операции ввода-вывода, несмотря на то, что JavaScript является однопоточным языком. Event Loop непрерывно следит за стеком вызовов, очередью обратных вызовов и различными очередями событий (таймеры, I/O).
Основные фазы Event Loop:
- timers: Выполняет запланированные обратные вызовы с
setTimeout()иsetInterval(). - pending callbacks: Выполняет обратные вызовы системных операций ввода-вывода (например, сетевых ошибок), отложенные до следующей итерации Event Loop.
- idle, prepare: Внутренние фазы Event Loop.
- poll:
- Вычисляет, как долго блокироваться и опрашивать операции ввода-вывода.
- Обрабатывает события в очереди I/O callbacks, когда их количество достигает определенного предела или исчерпывается время.
- check: Выполняет обратные вызовы, запланированные
setImmediate(). - close callbacks: Выполняет обратные вызовы закрытия, например,
socket.destroy().
process.nextTick() и микротаски (обещания, queueMicrotask()) выполняются между фазами Event Loop и до перехода к следующей фазе или завершения текущей. process.nextTick() имеет более высокий приоритет, чем микротаски.
// Примеры планирования задач
console.log('Старт');
setTimeout(() => {
console.log('Таймер 0');
}, 0);
setImmediate(() => {
console.log('setImmediate');
});
process.nextTick(() => {
console.log('nextTick');
});
Promise.resolve().then(() => {
console.log('Promise');
});
console.log('Конец');
// Типичный порядок выполнения (может варьироваться в зависимости от версии Node.js и нагрузки):
// Старт
// Конец
// nextTick
// Promise
// Таймер 0 (Выполнится в фазе timers)
// setImmediate (Выполнится в фазе check)
Event Loop позволяет Node.js эффективно обрабатывать множество параллельных запросов без создания отдельного потока для каждого из них, что обеспечивает высокую производительность.