Middle+
Milyen szcenáriók léteznek az Event Loop megvalósítására a Node.js-ben?
sobes.tech MI
Válasz az MI-től
A Node.js eseményhurka (Event Loop) iterációkban (tickekben) működik, és a következő fázisokat kezeli:
- Timers: a
setTimeout()éssetInterval()callbackjeit dolgozza fel. - Pending callbacks: végrehajtja a korábbi iterációból származó függőben lévő I/O műveletek callbackjeit.
- Idle, prepare: a Node.js belső használata.
- Poll:
- I/O callbackokat hajt végre (a legtöbb esetben).
- Ha nincs kész I/O callback, várhat új kapcsolatokat/eseményeket, vagy átmehet a Check fázisba.
- Check: a
setImmediate()callbackjeit futtatja. - Close callbacks: záró callbackokat hajt végre, például socketek esetén (
'close').
A fő Event Loop fázisok között, valamint minden fázis után a Node.js ellenőrzi és végrehajtja a következő mikrofeladat sorokat:
process.nextTick()sor: a legmagasabb prioritással rendelkezik, és minden más mikrofeladat és Event Loop fázis előtt fut.- Promise sor: a megoldott promiseokat hajtja végre.
Példa:
// A setTimeout, setImmediate és I/O callbackok előtt fut
process.nextTick(() => {
console.log('nextTick');
});
// A Timers fázisban fut
setTimeout(() => {
console.log('timeout');
}, 0);
// A Check fázisban fut
setImmediate(() => {
console.log('immediate');
});
// Aszinkron I/O művelet példája
const fs = require('fs');
fs.readFile(__filename, () => {
// A Poll fázisban fut
console.log('read file');
});
// Promise példa
Promise.resolve().then(() => {
// A promise sorban fut
console.log('promise');
});
A konzolon a kimenet nagyjából így fog kinézni:
nextTick
promise
timer
read file
immediate
(a read file és immediate sorrendje változhat az I/O művelet végrehajtásától függően).