Wie funktioniert die Ereignisschleife (Event Loop) in Node.js?
sobes.tech KI
Antwort von AI
Event Loop — ist ein Mechanismus, der es Node.js ermöglicht, nicht-blockierende I/O-Operationen auszuführen, obwohl JavaScript eine Single-Thread-Sprache ist. Der Event Loop überwacht kontinuierlich den Aufrufstapel, die Callback-Warteschlange und verschiedene Ereigniswarteschlangen (Timer, I/O).
Hauptphasen des Event Loop:
- timers: Führt die mit
setTimeout()undsetInterval()geplanten Callbacks aus. - pending callbacks: Führt Callbacks von System-I/O-Operationen aus (z.B. Netzwerkfehler), die bis zur nächsten Iteration des Event Loop verzögert wurden.
- idle, prepare: Interne Phasen des Event Loop.
- poll:
- Berechnet, wie lange blockiert werden soll und I/O-Operationen abgefragt werden.
- Verarbeitet Ereignisse in der I/O-Callback-Warteschlange, wenn deren Anzahl ein Limit erreicht oder die Zeit abläuft.
- check: Führt mit
setImmediate()geplante Callbacks aus. - close callbacks: Führt Abschluss-Callbacks aus, z.B.
socket.destroy().
process.nextTick() und Microtasks (Promises, queueMicrotask()) werden zwischen den Phasen des Event Loop ausgeführt und vor dem Übergang zur nächsten Phase oder dem Abschluss der aktuellen. process.nextTick() hat eine höhere Priorität als Microtasks.
// Beispiele für Aufgabenplanung
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('Ende');
// Typische Ausführungsreihenfolge (kann variieren je nach Node.js-Version und Last):
// Start
// Ende
// nextTick
// Promise
// Timer 0 (wird in der timers-Phase ausgeführt)
// setImmediate (wird in der check-Phase ausgeführt)
Der Event Loop ermöglicht es Node.js, viele parallele Anfragen effizient zu verarbeiten, ohne für jede einen separaten Thread zu erstellen, was eine hohe Leistung gewährleistet.