Sobes.tech
Middle+

Hoe werkt de gebeurtenislus (Event Loop) in Node.js?

sobes.tech AI

Antwoord van AI

Event Loop — is een mechanisme waarmee Node.js niet-blokkerende I/O-operaties kan uitvoeren, ondanks dat JavaScript een enkelvoudig draad-taal is. De Event Loop monitort continu de oproepstapel, de callbackwachtrij en verschillende gebeurteniswachtrijen (timers, I/O).

Belangrijkste fasen van de Event Loop:

  1. timers: Voert de geplande callbacks uit met setTimeout() en setInterval().
  2. pending callbacks: Voert callbacks uit van systeem-I/O-operaties (bijvoorbeeld netwerkfouten), uitgesteld tot de volgende iteratie van de Event Loop.
  3. idle, prepare: Interne fasen van de Event Loop.
  4. poll:
    • Berekent hoe lang geblokkeerd moet worden en I/O-operaties moet worden gecontroleerd.
    • Verwerkt gebeurtenissen in de I/O callbackwachtrij wanneer ze een limiet bereiken of de tijd op is.
  5. check: Voert callbacks uit gepland met setImmediate().
  6. close callbacks: Voert afsluit callbacks uit, bijvoorbeeld socket.destroy().

process.nextTick() en microtaken (belofte, queueMicrotask()) worden tussen de fasen van de Event Loop uitgevoerd en vóór de overgang naar de volgende fase of het voltooien van de huidige. process.nextTick() heeft een hogere prioriteit dan microtaken.

// Voorbeelden van taakplanning
console.log('Start');

setTimeout(() => {
  console.log('Timer 0');
}, 0);

setImmediate(() => {
  console.log('setImmediate');
});

process.nextTick(() => {
  console.log('nextTick');
});

Promise.resolve().then(() => {
  console.log('Promise');
});

console.log('Einde');

// Typische uitvoeringsvolgorde (kan variëren afhankelijk van Node.js-versie en belasting):
// Start
// Einde
// nextTick
// Promise
// Timer 0  (Wordt uitgevoerd in de timers-fase)
// setImmediate (Wordt uitgevoerd in de check-fase)

De Event Loop stelt Node.js in staat om veel parallelle verzoeken efficiënt te verwerken zonder voor elk een aparte thread te creëren, wat zorgt voor hoge prestaties.