Ich lerne NodeJS und wollte nur etwas klarstellen. In einigen einführenden Tutorials und Büchern wurde bereits sehr früh die "nicht blockierende" Architektur von Node beschrieben - oder vielmehr, dass es möglich ist (und empfohlen wird, den gesamten Punkt), nicht blockierend zu codieren.
Dieses Beispiel wurde zum Beispiel in einem Buch gegeben, in dem ich eine asynchrone Methode zum Abrufen von Daten aus einer Datenbank lese.
http.createServer(function (req, res) {
database.getInformation(function (data) {
res.writeHead(200);
res.end(data);
});
});
Was passiert (so wie ich es verstehe) ist, dass Node den Aufruf an die Datenbank durchführt und dann die Verarbeitung dessen fortsetzt, was als nächstes auf dem Aufrufstapel stehen mag. Wenn die Datenbankanforderung abgeschlossen ist, wird die Datenvariable in der anonymen Rückruffunktion aufgefüllt und diese Funktion zum Aufrufstapel hinzugefügt (und anschließend ausgeführt, wenn der Knoten dazu gelangt).
Meine Frage ist, was genau verarbeitet die Datenbankanfrage? Sicherlich muss Node blocken, während es das tut? Was kümmert sich um die Datenbankanfrage? Oder wenn der Knoten auf eine asynchrone HTTP-GET-Anforderung an eine externe Ressource wartet, was kümmert sich dann um diese Anforderung, die es dem Knoten ermöglicht, den Aufrufstapel weiter zu verarbeiten und "nicht blockierend" zu sein?
net
Paket, wenn http nicht verfügbar ist.