Ein Threaded-Modell erstellt für jede Anforderung einen neuen Thread. Dies bedeutet, dass Sie in Bezug auf Berechnung und Speicher einen erheblichen Mehraufwand haben. Eine Ereignisschleife wird in einem einzelnen Thread ausgeführt, was bedeutet, dass Sie den Overhead nicht erhalten.
Das Ergebnis ist, dass Sie Ihr Programmiermodell ändern müssen. Weil all diese verschiedenen Dinge im selben Thread passieren, kannst du nicht blockieren. Das bedeutet, dass Sie nicht darauf warten können, dass etwas passiert, denn das würde den gesamten Thread blockieren. Stattdessen definieren Sie einen Rückruf, der nach Abschluss der Aktion aufgerufen wird. Dies wird normalerweise als nicht blockierende E/A bezeichnet.
Pseudo Beispiel zum Blockieren I/O:
row = db_query('SELECT * FROM some_table');
print(row);
Pseudo Beispiel für nicht-blockierende I/O:
db_query('SELECT * FROM some_table', function (row) {
print(row);
});
In diesem Beispiel wird lambda (anonyme Funktionen), wie sie in JavaScript verwendet werden, die ganze Zeit. JS verwendet Ereignisse intensiv, und genau darum geht es bei Callbacks. Sobald die Aktion abgeschlossen ist, wird ein Ereignis ausgelöst, das den Rückruf auslöst. Deshalb wird es oft als Modell oder asynchrones Modell bezeichnet.
Die Implementierung dieses Modells verwendet eine Schleife, die diese Ereignisse verarbeitet und auslöst. Deshalb wird es als Ereigniswarteschlange oder Ereignisschleife bezeichnet.
Prominente Beispiele für Ereigniswarteschlange Gerüste umfassen:
Vielleicht ein bisschen genauer über das, was Sie nicht verstehen? – igorw