ホームページ >ウェブフロントエンド >jsチュートリアル >Node.js のノンブロッキング I/O とは何ですか?例文でわかる!

Node.js のノンブロッキング I/O とは何ですか?例文でわかる!

青灯夜游
青灯夜游転載
2021-08-13 10:55:392347ブラウズ

Node.jsノンブロッキング I/O とは何ですか?この記事では、Node.js のノンブロッキング I/O を理解するのに役立つ例を使用しています。

Node.js のノンブロッキング I/O とは何ですか?例文でわかる!

フロントに書いてます

私は長い間 Node.js を学びたいと思っていました。フロントエンドが理解する必要があると感じていますサーバーサイドの知識があり、独立できるようになります。小規模なフルスタック プロジェクトを完了しましたが、時間的な要因により、先学期にいくつかの基礎を学んだ後、学習する時間がなくなりました。たまたま、第 2 試験に合格しました。もちろん今日は、Node.js をもう一度テストするためにここに来ました。 ! ! [推奨される学習: "nodejs チュートリアル "]

  • I/O は入力/出力、システムの入出力です
  • ブロッキング I /O ノンブロッキング I/O との違いは、 システムが入力を受け取ることです。出力の期間中に、他の入力を受け取ることができますか

  • 食堂に食事に行きます。食べ物を手に入れるためには全員が列に並ばなければなりません

    私たちのプロセスは次のとおりです。列に並ぶ ------>前の人が食べ物を手に入れるのを待ちます--- ----->次は私たちが自分の食べ物を準備する番です---------->食べ始めます

  • 外食: レストランで食べ物を注文

    さあ、プロセスは次のとおりです: 座る------> 注文------> 待つ---------- > 食事を開始します

    マークダウンで奇妙なものを使用してみてください

  • 食べ物を注文する列とレストランの注文

  • 食べ物を注文する人へ 例:

    • 食べ物の行列が I/O をブロックしている
    • # レストランでの食べ物の注文はブロックされていません I /O

続き 上の文を見てみましょう:

システムは入力を受け取ります。出力期間中に、他のメッセージを受信できますか?

Lizi では、システム = 食堂で調理するおばさんまたはレストランのウェイター、入力 = 注文、出力 = サーブ (食べ物を提供する)

食堂のおばさんはサービスすることしかできません。米を一粒ずつ--------> ブロック I/O

## ウェイターは注文後に他のゲストにサービスすることもできます -------> ノンブロッキング I/O

実は、この問題は小学校の先生が教えてくれたものです。私たちの

小芳さんは母親の家事を手伝います。彼女がしなければならないのは、洗濯機で服を洗うことです ( 20 分)、床の掃除(10 分)、机の整理整頓(10 分)、服を掛ける(5 分)。 Xiaofang がこれらの作業を少なくとも ( ) 分で完了できるように、賢くて合理的な新しいシーケンスを設計できますか?

A.20

B.25

C.30

D.35

予想外でした? (実は、予想外でした~)

このプロセスでは、洗濯機を使って衣類を洗う=投入、衣類を乾燥する=排出するという流れになります。これは

ノンブロッキング I/O です。

考え方

ノンブロッキング I/O を理解するには、まず何を決定する必要がありますか?

    入出力システムがあることを確認する必要があります。
  • I/O プロセス中に他の I/O を実行できるかどうかを検討してください。
    • できる------>非ブロッキング
    • できない------->ブロッキング

栗を書く

最初に新しい

index.js を作成し、次にフロントエンド担当者の vs-code を開いて、ターミナルを開いて ## を実行します#npm install glob I/O がブロックされているかどうかをより簡単に観察できるように、glob パッケージをインストールします。 まず I/O のブロックについて見てみましょう

コードが最初に貼り付けられます:

index.js

<pre class="brush:js;toolbar:false;">const glob = require(&amp;#39;glob&amp;#39;); var result = null; console.time(&amp;#39;glob&amp;#39;) result = glob.sync(__dirname + &amp;#39;/**/*&amp;#39;) console.timeEnd(&amp;#39;glob&amp;#39;) console.log(result)</pre>まず、require を使用して glob を導入します。 package , 次に、 glob.sync を使用してディレクトリを出力する操作を実行します。結果を出力する際、 time/timeEnd を使用して時間を記録し、ノードがこの操作を実行するのにかかる時間を確認します。

ターミナルに入力します

nodeindex.js

このファイルを直接実行します

Node.js のノンブロッキング I/O とは何ですか?例文でわかる!最初の行を見て、コンピューター上で実行してください20.93 ミリ秒かかりますが、この量はサーバーとしては決して小さくありません。

ノンブロッキング I/O

コードに直接移動します:

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;)

今回は、結果が出力されるため、コールバック関数を使用して操作します。それでは、「get result」を出力することに置き換えて、タイミングが完了した後に print ステートメントを実行しましょう。結果を見てみましょう:

Node.js のノンブロッキング I/O とは何ですか?例文でわかる!最初まだ私たちの時間です: 3.258ms。前の 20.93 と比較すると、単純に短いです。多すぎないでください。最後に出力したステートメントがあり、最後に必要な演算結果が出力されます。つまり、これは次のとおりです。 input 出力の間に他の操作が実行されましたが、結果には影響せず、所要時間は大幅に短縮されました。

結論

私の理解: ノンブロッキング I/O により、待ち時間を大幅に短縮でき、待ち時間中に他のことも実行できます。タスク 操作 (アドバイス大歓迎!!!)

絶対的なものはありません。ノンブロッキング I/O が必ずしも良いというわけではありません。レストランを例に考えてみましょう。たとえば、ウェイターの間で事故が発生した場合、ゲスト全員がこのウェイターを待つ必要があり、レストランに影響が出る 全体的な品質 (サーバーのクラッシュとして理解できます)、I/O のブロック 複数のウェイターがいるので、1 対 1 のサービス、たとえ 1 人が事故を起こしても、全体的な品質には影響せず、複数のウェイターを雇用するには相応の労力が必要になります。

プログラミング関連の知識について詳しくは、プログラミング入門をご覧ください。 !

以上がNode.js のノンブロッキング I/O とは何ですか?例文でわかる!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は掘金--Nedで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。