Heim > Web-Frontend > js-Tutorial > Wie kann ich nicht blockierende Funktionen in Node.js korrekt implementieren?

Wie kann ich nicht blockierende Funktionen in Node.js korrekt implementieren?

Patricia Arquette
Freigeben: 2024-12-09 10:10:09
Original
357 Leute haben es durchsucht

How Can I Correctly Implement Non-Blocking Functions in Node.js?

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:

  • Untergeordnete Prozesse:Führen Sie den Code in einem separaten untergeordneten Prozess aus und erhalten Sie nach Abschluss eine asynchrone Benachrichtigung.
  • Worker-Threads (Node. js v11): Nutzen Sie die experimentellen Worker-Threads, die in Node.js eingeführt wurden v11.
  • Native Code-Add-ons: Entwickeln Sie benutzerdefinierte native Add-ons unter Verwendung von libuv oder Threads auf Betriebssystemebene.
  • Nutzung vorhandener asynchroner APIs: Bauen Sie auf vorhandenen asynchronen APIs auf und vermeiden Sie im Wesentlichen eine längere Codeausführung Thread.

Ü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);
  });
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage