Heim > Artikel > Web-Frontend > Was bedeutet E/A in NodeJS?
In nodejs bedeutet „E/A“ Eingabe und Ausgabe, was normalerweise darauf hinweist, dass „E/A“-Operationen in serielle Ausführung mit einem Thread und parallele Ausführung mit mehreren Threads unterteilt werden können Sequentielle Ausführung: Jede langsame Ausführung führt dazu, dass die nachfolgende Codeausführung blockiert wird.
Die Betriebsumgebung dieses Artikels: Windows 10-System, NodeJS-Version 12.19.0, Dell G3-Computer.
JavaScript im Browser wird in einem einzelnen Thread ausgeführt und teilt sich auch denselben Thread mit dem UI-Rendering. Wenn JavaScript ausgeführt wird, sollten sich das UI-Rendering und die Antwort in einem stagnierenden Zustand befinden. (Wenn die Ausführungszeit des Skripts 100 Millisekunden überschreitet, hat der Benutzer das Gefühl, dass die Seite hängen bleibt.) Wenn wir auf diese Situationen stoßen, werden wir über asynchrone Methoden nachdenken, um diese Warteprobleme zu beseitigen, und wir werden die Konzepte von asynchron und synchronisiert nicht einführen.
Als nächstes werfen wir einen genaueren Blick auf die ereignisgesteuerten und nicht blockierenden E/A-Funktionen von NodeJS. Das Verständnis dieser Funktionen ist für uns von grundlegenderer Bedeutung, um die NodeJS-Entwicklung besser zu erlernen und eine leistungsstarke Webplattform aufzubauen.
1. Übersicht über I/O-Operationen:I/O-Operationen sind jedem Entwickler bekannt. Lassen Sie uns nun kurz über die I.O.-Operationen von NodeJS sprechen. E/A-Operationen werden unterteilt in: serielle Ausführung mit einem Thread und parallele Ausführung mit mehreren Threads. Beide Methoden haben ihre eigenen Vor- und Nachteile. Die Kosten für Multithreading sind die hohen Kosten für die Thread-Erstellung und den Thread-Kontextwechsel während der Ausführung, und Multithreading ist mit Sperr- und Statussynchronisierungsproblemen konfrontiert. Die Single-Thread-Installation wird nacheinander ausgeführt. Jede Verlangsamung der Ausführung führt dazu, dass nachfolgender Ausführungscode blockiert wird. Die Beschreibung der seriellen Ausführung von Aufgaben (konzeptionell ähnlich der synchronen Ausführung) und der parallelen Ausführung von Aufgaben lautet wie folgt:
Verwenden Sie einen einzelnen Thread in NodeJS, um Deadlocks und Statussynchronisierungsprobleme zu vermeiden, und verwenden Sie asynchrones I /O , um zu verhindern, dass einzelne Threads blockieren, um die CPU besser zu nutzen. Asynchrone E/A geht davon aus, dass E/A-Aufrufe nachfolgende Vorgänge nicht mehr blockieren und die ursprüngliche Wartezeit für den E/A-Abschluss anderen erforderlichen Unternehmen zur Ausführung zuteilen.
Manche Entwickler sind oft verwirrt über die Konzepte asynchron/synchron und blockierend/nicht blockierend, und die beiden haben nichts miteinander zu tun. Das Blockieren von E/A bedeutet, dass Sie nach dem Aufruf warten müssen, bis die Systemkernelebene alle Vorgänge abgeschlossen hat, bevor der Aufruf beendet wird. Nicht blockierende E/A kehrt sofort nach dem Aufruf zurück. In Bezug auf blockierende E/A und nicht blockierende E/A gibt es die folgende Abbildung:
2. Asynchrone E/A-Analyse von NodeJS:Ereignisschleife: Wenn der Prozess startet, erstellt Node eine Weile (true) Schleife, der Prozess jeder Ausführung des Schleifenkörpers wird als Tick bezeichnet, und der Prozess jedes Ticks besteht darin, zu prüfen, ob Zeit für die Verarbeitung vorhanden ist.
Beobachter: In jeder Zeitschleife gibt es einen oder mehrere Beobachter. Der Prozess der Beurteilung, ob Ereignisse verarbeitet werden müssen, besteht darin, diese Beobachter zu fragen, ob weitere Ereignisse verarbeitet werden müssen.
Anforderungsobjekt: Im Übergangsprozess von JavaScript, das einen Aufruf initiiert, zum Kernel, der den E/A-Vorgang abschließt, gibt es ein Zwischenprodukt, nämlich das Anforderungsobjekt.
E/A-Thread-Pool: Stellen Sie die Anforderung zusammen, senden Sie sie an den E/A-Thread-Pool, um auf die Ausführung zu warten, schließen Sie den ersten Schritt des E/A-Vorgangs ab und geben Sie den zweiten Teil der Rückrufbenachrichtigung ein. (In Windows wird nach dem Aufruf der E/A-Operation im Thread-Pool das erhaltene Ergebnis im Attribut req->result gespeichert und anschließend PostQueuedCompletionStatus() aufgerufen, um IOCP darüber zu informieren, dass die aktuelle Objektoperation durchgeführt wurde abgeschlossen.)
Asynchrone E/A sieht wie folgt aus:
3. Beispiel für asynchrone NodeJS-Programmierung:Die zugehörigen Konzepte asynchroner E/A wurden bereits früher vorgestellt, hier ist ein Beispiel für asynchrone E/A O-Bedienung:
var config = require('./config.json'); var fs = require("fs"); var http = require('http'); var url_module = require("url"); http.createServer(function (request, response) { var key = url_module.parse(request.url).query.replace('key=', ''); switch (request.method) { case 'GET': // Asynchronous Response Generation fs.readFile(config.dataPath + key, 'utf8', function(err, value) { if (err) { // Return File Not Found if file hasn't yet been created response.writeHead(404, {'Content-Type': 'text/plain'}); response.end("The file (" + config.dataPath + key + ") does not yet exist."); } else { // If the file exists, read it and return the sorted contents var sorted = value.split(config.sortSplitString).sort().join(''); response.writeHead(200, {'Content-Type': 'text/plain'}); response.end(sorted); } }); break; case 'POST': // Synchronously append POSTed data to a file var postData = ''; request .on('data', function (data) { postData += data; }) .on('end', function () { fs.appendFile(config.dataPath + key, postData, function(err) { if (err) { // Return error if unable to create/append to the file response.writeHead(400, {'Content-Type': 'text/plain'}); response.end('Error: Unable to write file: ' + err); } else { // Write or append posted data to a file, return "success" response response.writeHead(200, {'Content-Type': 'text/plain'}); response.end('success'); } }); }); break; default: response.writeHead(400, {'Content-Type': 'text/plain'}); response.end("Error: Bad HTTP method: " + request.method); } }).listen(config.serverPort); console.log('synchronous server is running: ', config.serverPort);
Empfohlenes Lernen: „
nodejs-Video-TutorialDas obige ist der detaillierte Inhalt vonWas bedeutet E/A in NodeJS?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!