Heim >Web-Frontend >js-Tutorial >Was ist nicht blockierender E/A in Node.js? Mit Beispielen verstehen!

Was ist nicht blockierender E/A in Node.js? Mit Beispielen verstehen!

青灯夜游
青灯夜游nach vorne
2021-08-13 10:55:392374Durchsuche

Was ist nicht blockierender E/A in

Node.js? Dieser Artikel verwendet Beispiele, um Ihnen das Verständnis der nicht blockierenden E/A in Node.js zu erleichtern. Ich hoffe, dass er Ihnen hilfreich sein wird!

Was ist nicht blockierender E/A in Node.js? Mit Beispielen verstehen!

Vorne geschrieben

Ich wollte schon lange Node.js lernen. Ich habe das Gefühl, dass das Front-End das serverseitige Wissen verstehen und in der Lage sein muss, ein kleines Full-Stack-Projekt abzuschließen Aus Zeitgründen habe ich jedoch letztes Semester keine Zeit mehr zum Lernen. Zufällig habe ich heute den zweiten Kurs bestanden und bin hier, um Sie erneut mit Node.js zu testen. ! ! [Empfohlenes Lernen: „nodejs-Tutorial“]

  • E/A ist Eingabe/Ausgabe. Der Unterschied zwischen der Eingabe und Ausgabe eines Systems, blockierender E/A und nicht blockierender E/A, besteht darin Das System empfängt Eingaben. Können während der Ausgabeperiode andere Eingaben empfangen werden? ---->Warten Die Leute vor uns kochen -------->Jetzt sind wir an der Reihe, selbst zu kochen------->Fangen Sie an zu essen
  • Auswärts essen: bestellen Essen im Restaurant
Jetzt ist unser Ablauf: Hinsetzen------->Bestellen------->Warten-------->Mit dem Essen beginnen

Versuchen Sie es Fangen Sie an, einige seltsame Dinge im Markdown zu verwenden.

  • Anstehen, um Essen zu bestellen, vs. Restaurantbestellungen.

  • Für diejenigen unter uns, die Personal bestellen:

    Anstehen, um Essen zu bestellen, blockiert die E/A.

    Restaurantbestellungen ist nicht-blockierende E/A

  • Sehen Sie sich weiterhin den oberen Satz an:

  • Kann das System während der Ausgabeperiode andere Eingaben empfangen
  • In der Kastanie = die Tante, die in der Kantine kocht, oder der Kellner im Restaurant, Eingabe = Essen bestellen, Ausgabe = Essen servieren (Essen servieren)
    • Die Tante in der Cafeteria kann nur ein Stück Essen servieren---------> /O
    • Der Kellner kann nach der Bestellung auch andere Gerichte servieren. Gast ------->Nicht blockierende E/A
  • Tatsächlich hat uns unsere Grundschullehrerin dieses Problem beigebracht

Xiaofang hilft ihrer Mutter Sie muss Folgendes tun: Wäsche in der Waschmaschine waschen (20 Minuten), den Boden fegen (10 Minuten), den Schreibtisch aufräumen (10 Minuten), Kleidung aufhängen (5 Minuten). Können Sie eine clevere und vernünftige neue Sequenz entwerfen, damit Xiaofang diese Dinge in mindestens ( ) Minuten erledigen kann?

A.20

B.25

C.30

D.35

Nicht erwartet? (Eigentlich habe ich es nicht erwartet~)

Bei diesem Vorgang verwenden wir die Waschmaschine zum Waschen von Kleidung = Eingabe und zum Trocknen der Kleidung = Ausgabe. Während die Waschmaschine Kleidung wäscht, können wir also andere Dinge tun das ist
nicht blockierende E/A

yo.

Denken

Was ist als Erstes zu bestimmen, um nicht blockierende E/A zu verstehen?

Wir müssen sicherstellen, dass es ein Eingabe-/Ausgabesystem gibt.

Überlegen Sie, ob während des E/A-Prozesses andere E/A ausgeführt werden können.

Kann------>Nicht blockierendKann nicht------->Blockieren

Eine Kastanie schreiben

  • Erstellen Sie zunächst einen neuen index.js, öffnen Sie dann unseren Front-End-VS-Code, öffnen Sie das Terminal, führen Sie <code>npm install glob aus, um ein Glob-Paket zu installieren, damit wir bequemer beobachten können, ob E/A blockiert ist.
  • Schauen wir uns zuerst das Blockieren von E/A an.
    • Der Code wird zuerst eingefügt: index.js
    • const glob = require(&#39;glob&#39;);
      
      var result = null;
      console.time(&#39;glob&#39;)
      result = glob.sync(__dirname + &#39;/**/*&#39;)
      console.timeEnd(&#39;glob&#39;)
      console.log(result)
    • Verwenden Sie zunächst require, um unser Glob-Paket einzuführen. Verwenden Sie anschließend glob.sync, um eines zu erstellen Ein Vorgang zum Drucken eines Verzeichnisses. Verwenden Sie beim Drucken des Ergebnisses time/timeEnd, um die Zeit aufzuzeichnen und zu sehen, wie viel Zeit der Knoten benötigt, um diesen Vorgang auszuführen.
    Geben Sie node index.js in das Terminal ein, um diese Datei direkt auszuführen. Schauen Sie sich die erste Zeile an. Die Ausführung dauert auf meinem Computer insgesamt 20,93 Millisekunden ein Server, ist nicht mehr klein.
Sehen wir uns die nicht blockierende E/A an

Gehen Sie direkt zum Code:
const glob = require(&#39;glob&#39;);
var result = null;
console.time(&#39;glob&#39;)
glob(__dirname + &#39;/**/*&#39;,function(err,res){
    result = res;
    // console.log(result)
    console.log(&#39;got result&#39;);
})
console.timeEnd(&#39;glob&#39;)
console.log(&#39;今天你卷了没?&#39;)

Dieses Mal verwenden wir eine Rückruffunktion für den Betrieb. Da es zu viele Zeilen zum Drucken des Ergebnisses gibt, werden wir es durch Drucken ersetzen. got result' und führen Sie nach Abschluss des Timings eine Druckanweisungsoperation aus. Werfen wir einen Blick auf das Ergebnis:

index.js,再打开我们前端人的vs-code,打开终端,执行npm install glob安装一个glob包,来帮我们更加方便去观察I/O是否阻塞。

先来看阻塞I/O

代码先贴上:index.js

rrreee

首先,先用require引入我们的glob包,接下来,用glob.sync去做一个打印目录的一个操作,将结果打印的同时,利用time/timeEnd,去记录时间,看node执行这个操作共花费多少时间。

在终端输入node index.js

Was ist nicht blockierender E/A in Node.js? Mit Beispielen verstehen!Zuallererst ist es unsere Zeit: 3,258 ms im Vergleich zu den vorherigen 20,93 Einfach weniger, nicht zu viel. Am Ende wird die Anweisung ausgegeben, und schließlich wird das gewünschte Operationsergebnis ausgegeben. Mit anderen Worten: Es führt andere Operationen zwischen Eingabe und Ausgabe aus und hat keinen Einfluss auf das Ergebnis viel weniger Zeit!

Fazit

Mein Verständnis: Durch nicht blockierende E/A können wir die Wartezeit erheblich verkürzen, und während der Wartezeit können wir auch einige andere Vorgänge ausführen (jeder Rat ist willkommen!!!)

Es gibt keine Absolutheiten. Das bedeutet nicht, dass ein nicht blockierender I/O zum Beispiel ein Unfall unter den Kellnern ist Für diesen Kellner wirkt sich dies auf die Gesamtqualität des Restaurants aus (ja (wird als Serverabsturz verstanden); E/A wird blockiert. Da es mehrere Kellner gibt, ist ein Eins-zu-Eins-Service möglich, auch wenn einer von ihnen einen Unfall hat hat keinen Einfluss auf die Gesamtqualität und die Einstellung mehrerer Kellner ist ebenfalls mit entsprechenden Kosten verbunden.

Weitere Kenntnisse zum Thema Programmierung finden Sie unter: Einführung in die Programmierung! !

Das obige ist der detaillierte Inhalt vonWas ist nicht blockierender E/A in Node.js? Mit Beispielen verstehen!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:掘金--Ned. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen