Schauen wir uns an, was der Blockierungsbetrieb ist.
Ich simuliere eine Sleep () -Methode, um den Hello Star -Druck 10 Sekunden lang zu verzögern.
RequestHandlers.js
Die Codekopie lautet wie folgt:
Funktion start () {
console.log ("Anfragenhandler" Start "wurde genannt.");
Funktionsschlaf (Millisekunden) {
var startTime = new Date (). GetTime ();
while (neuer Datum (). GetTime () <starttime + millionenkunden);
}
Schlaf (10000);
zurück "Hallo Start";
}
Funktion upload () {
console.log ("Anfrage -Handler" Upload "wurde genannt.");
zurück "Hallo Upload";
}
exports.Start = start;
exports.Upload = Upload;
Bei Anfragen /Start verzögerte es sich vor dem Druck um 10 Sekunden.
Beim Anfordern/Upload wird es nicht betroffen.
Als nächstes machen Sie ein Experiment:
Geben Sie http: // localhost: 8888/starten Sie in der Adressleiste des ersten Browserfensters ein, öffnen Sie es aber nicht zuerst!
Geben Sie http: // localhost: 8888/hochladen in die Adressleiste des zweiten Browserfensters ein. Öffnen Sie es ebenfalls nicht zuerst!
Wir drücken in das erste Fenster ("/start") Eingabetaste und wechseln schnell zum zweiten Fenster ("/Upload") und drücken Sie die Eingabetaste.
Hinweis, was ist passiert:
Die /Start -URL dauerte 10 Sekunden, was das gleiche war wie erwartet.
Die /Upload -URL hat tatsächlich 10 Sekunden gedauert!
Es gibt jedoch keine Operation, die im entsprechenden Anforderungsbehandlungsunternehmen ähnelt () ähnlich (). Was ist das Problem?
Der Grund dafür ist, dass Start () Blockiervorgänge beinhaltet. Um es lebhaft auszudrücken: "Es blockiert alle anderen Verarbeitungsarbeiten."
Node.js ist einthreads und kann Aufgaben parallel verarbeiten, ohne zusätzliche Threads hinzuzufügen.
Es implementiert parallele Operationen durch Ereignisschleifen, und wir sollten dies voll ausnutzen. Vermeiden Sie es, Operationen so weit wie möglich zu blockieren, stattdessen nicht blockierende Vorgänge zu verwenden.
Im nächsten Abschnitt werden wir vorstellen, wie nicht blockierende Operationen implementiert werden können.