Sobes.tech
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:

  1. Timers: a setTimeout() és setInterval() callbackjeit dolgozza fel.
  2. Pending callbacks: végrehajtja a korábbi iterációból származó függőben lévő I/O műveletek callbackjeit.
  3. Idle, prepare: a Node.js belső használata.
  4. 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.
  5. Check: a setImmediate() callbackjeit futtatja.
  6. 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).

Milyen szcenáriók léteznek az Event Loop… - sobes.tech