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:
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!