Ich bin kein Node-Programmierer, aber ich bin daran interessiert, wie das single-threaded nicht-blockierende IO-Modell funktioniert. Nachdem ich den Artikel gelesen habe verstehen-der-knoten-js-event-schleife Ich bin wirklich verwirrt. Es gab ein Beispiel für das Modell:
c.query(
'SELECT SLEEP(20);',
function (err, results, fields) {
if (err) {
throw err;
}
res.writeHead(200, {'Content-Type': 'text/html'});
res.end('<html><head><title>Hello</title></head><body><h1>Return from async DB query</h1></body></html>');
c.end();
}
);
Que: Wenn es zwei Anfragen A (kommt zuerst) und B gibt, da es nur einen einzigen Thread gibt, wird das serverseitige Programm zuerst die Anfrage A bearbeiten: die SQL-Abfrage ist eine schlafende Anweisung, die für I/O-Warten steht. Und das Programm bleibt bei der I/O
und kann den Code, der die Webseite rendert, nicht ausführen. Wird das Programm während der Wartezeit zu Anforderung B wechseln? Meiner Meinung nach gibt es aufgrund des Single-Thread-Modells keine Möglichkeit, eine Anforderung von einer anderen zu trennen. Aber der Titel des Beispielcodes sagt, dass alles läuft parallel, außer Ihrem Code .
(P.S. Ich bin mir nicht sicher, ob ich den Code falsch verstanden habe, da ich Wie kann Node während des Wartens von A nach B wechseln? Und können Sie erklären das single-threaded nicht-blockierende IO-Modell eines Knotens in einer einfache Art und Weise? Ich würde es zu schätzen wissen, wenn Sie mir helfen könnten :)