Event Loop (Ereignisschleife)
Kurz: Die Event Loop ist eine Schleife, die auf Ereignisse wartet (Klick, Netzwerkantwort, Timer, fertig gelesene Datei) und die dazu registrierten Funktionen nacheinander ausführt – in einem einzigen Thread.
Genauer: Sie ist das Herz von JavaScript im Browser und in Node.js, aber auch von Python (asyncio), Tcl, Qt/GTK-Oberflächen und Spielen. Langsame Operationen laufen nicht im Vordergrund; stattdessen meldet das Betriebssystem ihre Fertigstellung, und die Schleife ruft den passenden Callback auf.
Im Detail
Prinzip
solange das Programm läuft:
nimm das nächste Ereignis aus der Warteschlange
führe die zugehörige Funktion bis zum Ende aus
(wenn nichts zu tun ist: auf neue Ereignisse warten)JavaScript
console.log("1 Start");
setTimeout(() => console.log("3 Timer (Macrotask)"), 0);
Promise.resolve().then(() => console.log("2b Microtask"));
console.log("2 Ende des Skripts");
// Ausgabe: 1 Start, 2 Ende des Skripts, 2b Microtask, 3 Timer (Macrotask)Zuerst läuft der aktuelle Code zu Ende, dann alle Microtasks (Promises, await), dann der nächste Macrotask (Timer, Ereignisse). Daran erkennt man, dass setTimeout(..., 0) nicht „sofort“ bedeutet.
Grundregel: nie blockieren
Da nur ein Thread die Schleife bedient, friert die ganze Anwendung ein, wenn eine Funktion lange rechnet: Die Seite reagiert nicht mehr auf Klicks. Lange Berechnungen lagert man in Web Worker, Worker-Threads oder eigene Prozesse aus (Threads).
while (true) {} // blockiert die Event Loop für immer: Seite hängtZusammen mit async/await entsteht der übliche Stil moderner Webserver und Oberflächen: viele gleichzeitige Verbindungen auf einem Thread (Node.js, Nginx, Netty). Eine Event Loop in Tcl ist im Kurs Tcl gezeigt (after, vwait).
Siehe auch: async/await, Callback, Nebenläufigkeit, Thread