Heim >Web-Frontend >js-Tutorial >Wie schreibe ich wirklich nicht blockierende Funktionen in Node.js?

Wie schreibe ich wirklich nicht blockierende Funktionen in Node.js?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-04 19:11:13250Durchsuche

How to Write Truly Non-Blocking Functions in Node.js?

Richtige Art, eine nicht blockierende Funktion in Node.js zu schreiben

Das nicht blockierende Paradigma ist in Node.js für die Erreichung des Erfolgs von entscheidender Bedeutung hohe Leistung. Es kann jedoch schwierig sein, wirklich nicht blockierende Funktionen zu schreiben, die den Fortschritt der Ereignisschleife nicht behindern.

Nicht blockierendes Verhalten verstehen

Code in ein Versprechen einschließen macht es nicht von Natur aus nicht blockierend. Die Promise-Executor-Funktion wird synchron ausgeführt, was bedeutet, dass darin lang laufender Code die Ausführung anderer Vorgänge blockiert.

Beispiel: Promise-Wrapped-Blockierungsfunktion

Bedenken Sie die folgende Funktion:

function longRunningFunc(val, mod) {
    return new Promise((resolve, reject) => {
        let sum = 0;
        for (let i = 0; i < 100000; i++) {
            for (let j = 0; j < val; j++) {
                sum += i + j % mod;
            }
        }
        resolve(sum);
    });
}

Während diese Funktion ein Promise zurückgibt, ist der Code innerhalb des Executors Blockierung. Die Ereignisschleife wartet, bis dieser Code abgeschlossen ist, bevor andere Vorgänge ausgeführt werden.

Asynchronität mit setTimeout simulieren

Ein Ansatz zur Emulation nicht blockierenden Verhaltens in diesem Fall ist die Verwendung von setTimeout:

function longRunningFunc(val, mod) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            let sum = 0;
            for (let i = 0; i < 100000; i++) {
                for (let j = 0; j < val; j++) {
                    sum += i + j % mod;
                }
            }
            resolve(sum);
        }, 10);
    });
}

Dieser Code plant die Ausführung der Langzeitschleife nach 10 Millisekunden Verzögerung. Allerdings blockiert es immer noch innerhalb dieses verzögerten Ausführungszeitraums.

Echte nicht blockierende Ansätze

Um wirklich nicht blockierende Funktionen zu erstellen, müssen Sie Techniken verwenden, die Code verschieben Ausführung außerhalb des Haupt-Node.js-Threads:

  • Untergeordnete Prozesse: Erstellen Sie einen separaten Prozess zur Bewältigung lang andauernder Aufgaben.
  • Worker-Threads: Nutzen Sie die experimentelle Worker-Threads-Funktion in Node.js, um mehrere Threads innerhalb eines einzigen Prozesses zu erstellen.
  • Nativer Code: Schreiben Sie C- oder andere native Code-Erweiterungen, die asynchrone Systemaufrufe verwenden oder Threads.
  • Vorhandene asynchrone APIs: Nutzen Sie asynchrone Vorgänge, die von Node.js-Kernmodulen bereitgestellt werden, wie z. B. Datei-E/A mit fs.readFile, HTTP-Anfragen mit http.get oder Datenbankabfragen mit mongoose.connect.

Das obige ist der detaillierte Inhalt vonWie schreibe ich wirklich nicht blockierende Funktionen in Node.js?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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