Heim Web-Frontend js-Tutorial Detaillierte Erläuterung des Blockierens und Nichtblockierens in Nodejs

Detaillierte Erläuterung des Blockierens und Nichtblockierens in Nodejs

May 18, 2021 am 10:23 AM
nodejs 阻塞 nicht blockierend

Dieser Artikel hilft Ihnen, das Blockieren und Nichtblockieren in Nodejs zu verstehen. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Detaillierte Erläuterung des Blockierens und Nichtblockierens in Nodejs

Empfohlene Studie: „nodejs-Tutorial

Jeder sollte ein gewisses Verständnis für die beiden Konzepte des Blockierens und Nichtblockierens haben:

Einfach ausgedrückt wird das Blockieren hauptsächlich durch den Nicht-Blockierungsmodus verursacht. Blockieren kann als asynchroner Modus verstanden werden, der einige zeitaufwändige Vorgänge verarbeitet. Wie werden also Blockieren und Nichtblockieren in Node.js beschrieben? Das Folgende erklärt dieses Problem hauptsächlich:

Was blockiert in Node?

E/A-Vorgänge können so verstanden werden, dass sie sich hauptsächlich auf die Interaktion mit der Systemfestplatte (Lesen und Schreiben von Daten) oder Netzwerkanforderungen usw. beziehen.

Blockieren bedeutet, dass die Ausführung anderen JS-Codes bis zum vorherigen Zeitpunkt warten muss. verbrauchender E/A-Vorgang oder einige Netzwerkanforderungen sind abgeschlossen. Da Node über eine Ereignisschleife verfügt, um dieses Problem zu lösen, führt es tatsächlich zu einer Blockierung, wenn die Ereignisschleife während der Ausführung von js nicht aktiviert wird.

Tatsächlich gibt es in Node.js unter normalen Umständen Blockierungssituationen. Der Grund dafür ist, dass die asynchrone Verarbeitung von Node für E/A-Vorgänge [unter Verwendung von Ereignisschleifen] benutzerfreundlicher ist, jedoch für einige CPU-intensive Vorgänge, die in JavaScript vorhanden sein können Die Leistung ist relativ gering. Einige Studenten fragen sich vielleicht: Warum kann Node.js CPU-intensive Vorgänge nicht asynchron unterstützen? Denn es versteht sich, dass es sich bei diesen CPU-intensiven Vorgängen tatsächlich um einige synchrone Codes handelt, wie z. B. eine große Anzahl von for-Schleifen, umfangreiche Datenberechnungen usw. I/O操作或者一些网络请求等完成之后。因为Node存在事件循环来解决这个问题,那假如说js再执行的过程中,事件循环没有被开启,其实就会造成阻塞的情况发生。

其实在Node.js中正常情况下也是存在被阻塞的情况,原因是Node的异步处理针对于I/O操作比较友好【利用事件循环】,但是对于JavaScript可能存在的一些CPU密集型的操作性能就比较低。有的同学可能会说,为什么CPU密集型的操作Node.js不能够异步支持呢?因为可以理解这些CPU密集型操作,其实都是一些同步代码,比如大量的for循环,海量的数据计算等。

Node.js的标准库中也存在一些同步的方法,这些方法大部分都是基于libuv来实现阻塞的效果。Node的原生模块中也存在一些阻塞方法。不过同时Node也会提供对应的异步版本的API。

什么事libuv呢? 是一个支持多平台的针对于异步I/O操作的库。 详细可见官网:https://libuv.org/

Node中什么是非阻塞呢?

首先思考一下在不局限于Node的背景之下如何实现非阻塞(异步)呢?

简单说两个:

1)可以开多个线程去处理并发的操作

2)事件循环的模式,如果有异步操作放在事件队列中,异步操作结束之后,调用对应的回调函数处理异步返回结果

Node.js是单线程的,原因是:Node.js外层是由JavaScript实现的,JavaScript的解释执行是通过V8引擎

Es gibt auch einige Synchronisationsmethoden in der Standardbibliothek von Node.js, von denen die meisten auf libuv basieren, um Blockierungseffekte zu erzielen. Es gibt auch einige Blockierungsmethoden in den nativen Modulen von Node. Allerdings wird Node auch eine entsprechende asynchrone Version der API bereitstellen.

Was ist libuv? Es handelt sich um eine Bibliothek für asynchrone I/O-Operationen, die mehrere Plattformen unterstützt. Einzelheiten finden Sie auf der offiziellen Website: https://libuv.org/

Was ist nicht blockierend in Node?

Überlegen Sie zunächst, wie Sie in einem Kontext, der nicht auf Knoten beschränkt ist, eine nicht blockierende (asynchrone) Implementierung erreichen können.

Um es einfach auszudrücken:

1) Mehrere Threads können geöffnet werden, um gleichzeitige Vorgänge zu verarbeiten

2) Ereignisschleifenmodus: Wenn ein asynchroner Vorgang in der Ereigniswarteschlange platziert wird, wird nach dem Ende des asynchronen Vorgangs die entsprechende Rückruffunktion aktiviert heißt „Verarbeitung asynchroner Rückgabeergebnisse“🎜🎜Node.js ist Single-Threaded. Der Grund dafür ist: Die äußere Schicht von Node.js wird von JavaScript implementiert und die Interpretation und Ausführung von JavaScript erfolgt über die V8-EngineCode>. 🎜🎜Da die Ausführung von JS Single-Threaded ist, ist es für uns unmöglich, während der JS-Interpretation und -Ausführung einen anderen Thread zur Interpretation und Ausführung zu öffnen. Daher verwendet Node.js die zweite Methode, um eine nicht blockierende (asynchrone Operation) zu erreichen. 🎜🎜🎜Achten Sie darauf, blockierende und nicht blockierende APIs in Node nicht zu vermischen.🎜🎜🎜🎜Englische Originaladresse: https://nodejs.org/en/docs/guides/blocking-vs-non-blocking/🎜🎜🎜Mehr Programmierung Für entsprechendes Wissen besuchen Sie bitte: 🎜Programmiervideo🎜! ! 🎜

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Blockierens und Nichtblockierens in Nodejs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ist NodeJS ein Backend-Framework? Ist NodeJS ein Backend-Framework? Apr 21, 2024 am 05:09 AM

Node.js kann als Backend-Framework verwendet werden, da es Funktionen wie hohe Leistung, Skalierbarkeit, plattformübergreifende Unterstützung, ein umfangreiches Ökosystem und einfache Entwicklung bietet.

So verbinden Sie NodeJS mit der MySQL-Datenbank So verbinden Sie NodeJS mit der MySQL-Datenbank Apr 21, 2024 am 06:13 AM

Um eine Verbindung zu einer MySQL-Datenbank herzustellen, müssen Sie die folgenden Schritte ausführen: Installieren Sie den MySQL2-Treiber. Verwenden Sie mysql2.createConnection(), um ein Verbindungsobjekt zu erstellen, das die Hostadresse, den Port, den Benutzernamen, das Passwort und den Datenbanknamen enthält. Verwenden Sie „connection.query()“, um Abfragen durchzuführen. Verwenden Sie abschließend Connection.end(), um die Verbindung zu beenden.

Was sind die globalen Variablen in NodeJS? Was sind die globalen Variablen in NodeJS? Apr 21, 2024 am 04:54 AM

Die folgenden globalen Variablen sind in Node.js vorhanden: Globales Objekt: global Kernmodul: Prozess, Konsole, erforderlich Laufzeitumgebungsvariablen: __dirname, __filename, __line, __column Konstanten: undefiniert, null, NaN, Infinity, -Infinity

Was ist der Unterschied zwischen den Dateien npm und npm.cmd im Installationsverzeichnis von nodejs? Was ist der Unterschied zwischen den Dateien npm und npm.cmd im Installationsverzeichnis von nodejs? Apr 21, 2024 am 05:18 AM

Es gibt zwei npm-bezogene Dateien im Node.js-Installationsverzeichnis: npm und npm.cmd. Die Unterschiede sind wie folgt: unterschiedliche Erweiterungen: npm ist eine ausführbare Datei und npm.cmd ist eine Befehlsfensterverknüpfung. Windows-Benutzer: npm.cmd kann über die Eingabeaufforderung verwendet werden, npm kann nur über die Befehlszeile ausgeführt werden. Kompatibilität: npm.cmd ist spezifisch für Windows-Systeme, npm ist plattformübergreifend verfügbar. Nutzungsempfehlungen: Windows-Benutzer verwenden npm.cmd, andere Betriebssysteme verwenden npm.

Gibt es einen großen Unterschied zwischen NodeJS und Java? Gibt es einen großen Unterschied zwischen NodeJS und Java? Apr 21, 2024 am 06:12 AM

Die Hauptunterschiede zwischen Node.js und Java sind Design und Funktionen: Ereignisgesteuert vs. Thread-gesteuert: Node.js ist ereignisgesteuert und Java ist Thread-gesteuert. Single-Threaded vs. Multi-Threaded: Node.js verwendet eine Single-Threaded-Ereignisschleife und Java verwendet eine Multithread-Architektur. Laufzeitumgebung: Node.js läuft auf der V8-JavaScript-Engine, während Java auf der JVM läuft. Syntax: Node.js verwendet JavaScript-Syntax, während Java Java-Syntax verwendet. Zweck: Node.js eignet sich für I/O-intensive Aufgaben, während Java für große Unternehmensanwendungen geeignet ist.

Ist NodeJS eine Back-End-Entwicklungssprache? Ist NodeJS eine Back-End-Entwicklungssprache? Apr 21, 2024 am 05:09 AM

Ja, Node.js ist eine Backend-Entwicklungssprache. Es wird für die Back-End-Entwicklung verwendet, einschließlich der Handhabung serverseitiger Geschäftslogik, der Verwaltung von Datenbankverbindungen und der Bereitstellung von APIs.

Welches soll man zwischen NodeJS und Java wählen? Welches soll man zwischen NodeJS und Java wählen? Apr 21, 2024 am 04:40 AM

Node.js und Java haben jeweils ihre Vor- und Nachteile in der Webentwicklung, und die Wahl hängt von den Projektanforderungen ab. Node.js zeichnet sich durch Echtzeitanwendungen, schnelle Entwicklung und Microservices-Architektur aus, während Java sich durch Support, Leistung und Sicherheit auf Unternehmensniveau auszeichnet.

So stellen Sie das NodeJS-Projekt auf dem Server bereit So stellen Sie das NodeJS-Projekt auf dem Server bereit Apr 21, 2024 am 04:40 AM

Serverbereitstellungsschritte für ein Node.js-Projekt: Bereiten Sie die Bereitstellungsumgebung vor: Erhalten Sie Serverzugriff, installieren Sie Node.js, richten Sie ein Git-Repository ein. Erstellen Sie die Anwendung: Verwenden Sie npm run build, um bereitstellbaren Code und Abhängigkeiten zu generieren. Code auf den Server hochladen: über Git oder File Transfer Protocol. Abhängigkeiten installieren: Stellen Sie eine SSH-Verbindung zum Server her und installieren Sie Anwendungsabhängigkeiten mit npm install. Starten Sie die Anwendung: Verwenden Sie einen Befehl wie node index.js, um die Anwendung zu starten, oder verwenden Sie einen Prozessmanager wie pm2. Konfigurieren Sie einen Reverse-Proxy (optional): Verwenden Sie einen Reverse-Proxy wie Nginx oder Apache, um den Datenverkehr an Ihre Anwendung weiterzuleiten

See all articles