


Detaillierte Erläuterung des Blockierens und Nichtblockierens in Nodejs
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.
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引擎
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?
Um es einfach auszudrücken:Überlegen Sie zunächst, wie Sie in einem Kontext, der nicht auf Knoten beschränkt ist, eine nicht blockierende (asynchrone) Implementierung erreichen können.
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 dieV8-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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

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.

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.

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

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.

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.

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.

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.

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
