Middle+
Kako funkcioniše petlja događaja (Event Loop) u Node.js?
sobes.tech АИ
Одговор од АИ
Event Loop — mehanizam koji omogućava Node.js-u da izvršava neblokirajuće operacije ulaza/izlaza, uprkos tome što je JavaScript jezik sa jednim nitom. Event Loop kontinuirano nadgleda stek poziva, red callbackova i razne redove događaja (tajmeri, I/O).
Glavne faze Event Loop-a:
- timers: Izvršava zakazane callbackove sa
setTimeout()isetInterval(). - pending callbacks: Izvršava callbackove sistemskih operacija ulaza/izlaza (npr. mrežne greške), odložene do sledeće iteracije Event Loop-a.
- idle, prepare: Interni faze Event Loop-a.
- poll:
- Izračunava koliko dugo da blokira i proverava operacije ulaza/izlaza.
- Obradjuje događaje u redovima I/O callbackova kada dostignu određeni limit ili vreme istekne.
- check: Izvršava callbackove zakazane sa
setImmediate(). - close callbacks: Izvršava callbackove zatvaranja, na primer
socket.destroy().
process.nextTick() i mikro zadaci (obećanja, queueMicrotask()) se izvršavaju između faza Event Loop-a i pre prelaska na sledeću fazu ili završetka trenutne. process.nextTick() ima viši prioritet od mikro zadataka.
// Primeri planiranja zadataka
console.log('Početak');
setTimeout(() => {
console.log('Tajmer 0');
}, 0);
setImmediate(() => {
console.log('setImmediate');
});
process.nextTick(() => {
console.log('nextTick');
});
Promise.resolve().then(() => {
console.log('Promise');
});
console.log('Kraj');
// Tipičan red izvršavanja (može varirati u zavisnosti od verzije Node.js i opterećenja):
// Početak
// Kraj
// nextTick
// Promise
// Tajmer 0 (biće izvršen u fazi timers)
// setImmediate (biće izvršen u fazi check)
Event Loop omogućava Node.js-u da efikasno obrađuje veliki broj paralelnih zahteva bez kreiranja posebnog niti za svaki od njih, što obezbeđuje visok učinak.