Heim >Web-Frontend >js-Tutorial >Erstellen Sie ganz einfach einen NodeJS-Server (7): Implementierung der Blockierungsoperationen_node.js

Erstellen Sie ganz einfach einen NodeJS-Server (7): Implementierung der Blockierungsoperationen_node.js

WBOY
WBOYOriginal
2016-05-16 16:25:461232Durchsuche

Lassen Sie uns einen Blick darauf werfen, was Blockierungsvorgänge sind.

Ich simuliere eine Sleep()-Methode, um das Drucken von „Hello Star“ um 10 Sekunden zu verzögern.

requestHandlers.js

Code kopieren Der Code lautet wie folgt:

Funktion start() {
console.log("Der Anforderungshandler 'start' wurde aufgerufen.");
Funktion sleep(milliSeconds) {
var startTime = new Date().getTime();
while (new Date().getTime() < startTime milliSeconds);
}
schlafen(10000);
Geben Sie „Hallo Start“ zurück;
}

Funktion upload() {
console.log("Der Anforderungshandler 'upload' wurde aufgerufen.");
Geben Sie „Hallo Upload“ zurück;
}

exports.start = start;
exports.upload = hochladen;

Beim Anfordern/Start gibt es eine Verzögerung von 10 Sekunden vor dem Drucken.

Beim Anfordern/Hochladen wird dies nicht beeinträchtigt.

Machen wir ein Experiment:

Geben Sie http://localhost:8888/start in die Adressleiste des ersten Browserfensters ein, aber öffnen Sie es noch nicht!

Geben Sie http://localhost:8888/upload in die Adressleiste des zweiten Browserfensters ein. Öffnen Sie es noch nicht!

Wir drücken im ersten Fenster („/start“) die Eingabetaste, wechseln dann schnell zum zweiten Fenster („/upload“) und drücken die Eingabetaste.

Achtung, was ist passiert:

Das Laden der

/start-URL dauerte 10 Sekunden, was wir erwartet hatten.

Die

/Upload-URL dauerte ebenfalls 10 Sekunden!

Ja, es gibt keine ähnlichen Operationen wie „sleep()“ im entsprechenden Anforderungshandler. Was ist das Problem?

Der Grund dafür ist, dass start() blockierende Operationen enthält. Im übertragenen Sinne „blockiert es alle anderen Verarbeitungsarbeiten.“

Node.js ist Single-Threaded und kann Aufgaben parallel verarbeiten, ohne zusätzliche Threads hinzuzufügen.

Es implementiert parallele Operationen durch eine Ereignisschleife. Wir sollten dies voll ausnutzen – blockierende Operationen so weit wie möglich vermeiden und stattdessen nicht blockierende Operationen verwenden.

Im nächsten Abschnitt stellen wir vor, wie nicht blockierende Vorgänge implementiert werden.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn