Korrekte Implementierung nicht blockierender Funktionen in Node.js
Trotz des Missverständnisses führt das bloße Einschließen von Code in ein Versprechen nicht dazu, dass es „nicht“ wird -Blockierung. Die Promise-Executor-Funktion ist synchroner Natur und blockiert die Ausführung. Dies ist der Grund für die im bereitgestellten Code beobachtete Verzögerung, bevor nachfolgende Zeilen gedruckt werden.
Das Problem mit dem bereitgestellten Code
Der Code scheint zunächst nicht blockierend zu sein , wobei ein Promise verwendet wird, um das Ergebnis der rechenintensiven longRunningFunc zurückzugeben. Bei der Ausführung beobachten wir jedoch eine Verzögerung, bevor die zweite und dritte Zeile gedruckt werden, was darauf hinweist, dass das Programm auf die Auflösung des Versprechens wartet.
Echter nicht blockierender Code in Node.js
Um wirklich nicht blockierenden Code in Node.js zu erstellen, haben wir mehrere Optionen:
Überarbeitung des Beispiels
Während das Einschließen des Codes in ein Promise für nicht blockierendes Verhalten nicht ausreicht, können wir setTimeout() zum Planen verwenden die For-Schleife für die spätere Ausführung:
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 Ansatz verschiebt das Timing der For-Schleife und erweckt den Anschein eines nicht blockierenden Verhaltens. Es ist jedoch wichtig zu beachten, dass die For-Schleife nach der Planung weiterhin synchron ausgeführt wird. Um echten nicht blockierenden Code zu erhalten, müssten wir eine der zuvor beschriebenen Techniken anwenden.
Das obige ist der detaillierte Inhalt vonWie kann ich nicht blockierende Funktionen in Node.js korrekt implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!