Node.jsノンブロッキング I/O とは何ですか?この記事では、Node.js のノンブロッキング I/O を理解するのに役立つ例を使用しています。
フロントに書いてます
私は長い間 Node.js を学びたいと思っていました。フロントエンドが理解する必要があると感じていますサーバーサイドの知識があり、独立できるようになります。小規模なフルスタック プロジェクトを完了しましたが、時間的な要因により、先学期にいくつかの基礎を学んだ後、学習する時間がなくなりました。たまたま、第 2 試験に合格しました。もちろん今日は、Node.js をもう一度テストするためにここに来ました。 ! ! [推奨される学習: "nodejs チュートリアル "]
食堂に食事に行きます。食べ物を手に入れるためには全員が列に並ばなければなりません
私たちのプロセスは次のとおりです。列に並ぶ ------>前の人が食べ物を手に入れるのを待ちます--- ----->次は私たちが自分の食べ物を準備する番です---------->食べ始めます
外食: レストランで食べ物を注文
さあ、プロセスは次のとおりです: 座る------> 注文------> 待つ---------- > 食事を開始します
マークダウンで奇妙なものを使用してみてください
食べ物を注文する列とレストランの注文
食べ物を注文する人へ 例:
続き 上の文を見てみましょう:
システムは入力を受け取ります。出力期間中に、他のメッセージを受信できますか?
Lizi では、システム = 食堂で調理するおばさんまたはレストランのウェイター、入力 = 注文、出力 = サーブ (食べ物を提供する)
食堂のおばさんはサービスすることしかできません。米を一粒ずつ--------> ブロック I/O
## ウェイターは注文後に他のゲストにサービスすることもできます -------> ノンブロッキング I/O小芳さんは母親の家事を手伝います。彼女がしなければならないのは、洗濯機で服を洗うことです ( 20 分)、床の掃除(10 分)、机の整理整頓(10 分)、服を掛ける(5 分)。 Xiaofang がこれらの作業を少なくとも ( ) 分で完了できるように、賢くて合理的な新しいシーケンスを設計できますか? A.20B.25C.30D.35予想外でした? (実は、予想外でした~) このプロセスでは、洗濯機を使って衣類を洗う=投入、衣類を乾燥する=排出するという流れになります。これは
ノンブロッキング I/O です。
index.js を作成し、次にフロントエンド担当者の vs-code を開いて、ターミナルを開いて ## を実行します#npm install glob
I/O がブロックされているかどうかをより簡単に観察できるように、glob パッケージをインストールします。 まず I/O のブロックについて見てみましょう
コードが最初に貼り付けられます:
index.js<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">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)</pre><div class="contentsignin">ログイン後にコピー</div></div>
まず、require を使用して glob を導入します。 package , 次に、 glob.sync を使用してディレクトリを出力する操作を実行します。結果を出力する際、 time/timeEnd を使用して時間を記録し、ノードがこの操作を実行するのにかかる時間を確認します。
ターミナルに入力します
nodeindex.jsこのファイルを直接実行します
最初の行を見て、コンピューター上で実行してください20.93 ミリ秒かかりますが、この量はサーバーとしては決して小さくありません。
ノンブロッキング I/O
コードに直接移動します:
const glob = require('glob'); var result = null; console.time('glob') glob(__dirname + '/**/*',function(err,res){ result = res; // console.log(result) console.log('got result'); }) console.timeEnd('glob') console.log('今天你卷了没?')
今回は、結果が出力されるため、コールバック関数を使用して操作します。それでは、「get result」を出力することに置き換えて、タイミングが完了した後に print ステートメントを実行しましょう。結果を見てみましょう:
最初まだ私たちの時間です: 3.258ms。前の 20.93 と比較すると、単純に短いです。多すぎないでください。最後に出力したステートメントがあり、最後に必要な演算結果が出力されます。つまり、これは次のとおりです。 input 出力の間に他の操作が実行されましたが、結果には影響せず、所要時間は大幅に短縮されました。
結論絶対的なものはありません。ノンブロッキング I/O が必ずしも良いというわけではありません。レストランを例に考えてみましょう。たとえば、ウェイターの間で事故が発生した場合、ゲスト全員がこのウェイターを待つ必要があり、レストランに影響が出る 全体的な品質 (サーバーのクラッシュとして理解できます)、I/O のブロック 複数のウェイターがいるので、1 対 1 のサービス、たとえ 1 人が事故を起こしても、全体的な品質には影響せず、複数のウェイターを雇用するには相応の労力が必要になります。
プログラミング関連の知識について詳しくは、プログラミング入門をご覧ください。 !
以上がNode.js のノンブロッキング I/O とは何ですか?例文でわかる!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。