この記事では、Nodeのさまざまな I/O モデルについて説明し、ブロッキング I/O モデル、ノンブロッキング I/O モデル、ノンブロッキング非同期 I/O を紹介します。役立つように!
# ネットワーク リクエスト IO を例に挙げて、最初に、完全なネットワーク IO リクエストを処理するサーバーの一般的なプロセスを紹介します。 #アプリケーションは操作の結果を取得します。これには通常、次の 2 つの異なる段階が含まれます: #データの準備ができるまで待機ブロッキングI/O
I/O をブロックすると、CPU が I/O を待機することになり、CPU タイム スライスが無駄になります。
ノンブロッキング I/O モデル (ノンブロッキング I/O)
従来のノンブロッキング I/O との比較
データなしで直接戻ります。データを取得するには、ファイル記述子を通じてデータを再度読み取る必要があります。ノン
ブロッキング呼び出しGet が返された場合 (実際に期待されるデータではありません)、CPU タイム スライスを他の処理に使用できるため、パフォーマンスが大幅に向上します。
しかし、それに伴う問題は、前の操作が完全な I/O ではなく、返された結果が予期したビジネス データではなく、非同期呼び出しステータスのみであったことです。完全なデータを取得するには、アプリケーションは IO 操作を繰り返し呼び出して、操作が完了したかどうかを確認する必要があります。この操作はポーリング
と呼ばれます。いくつかの一般的なポーリング戦略は次のとおりです。 #ビジー ポーリングこれは最も原始的でパフォーマンスが最も低い方法です。呼び出しを繰り返して I/O ステータスをチェックし、完全なデータを取得します
3 つの I/O 多重化メカニズムの違いは次のとおりです。
select選択により、ファイル ステータスの保存に 1024 個の長さの配列が使用されるため、最大 1024 個のファイル記述子を同時に検出できます
select と比較してわずかに改善されました。リンクされたリストを使用すると、1024 という長さの制限が回避され、不必要な走査チェックが回避されます。select と比較して、パフォーマンスがわずかに改善されました。
スリープします、イベントが発生してスレッドが起動されるまで。イベント通知を真に利用し、(ファイル記述子) クエリを走査する代わりにコールバックを実行するため、CPU を無駄にしません
概要: 本質的に、ポーリングは依然として同期です。アプリケーションは I/O が完全に戻るのをまだ待っているため、この操作は実行されません。待機期間中、アプリケーションはファイル記述状態をトラバースするか、スリープしてイベントの発生を待ちます。
信号駆動型 I/O モデル
信号駆動型 I/O モデルでは、アプリケーションは信号を使用して次のことを行います。 I/O を駆動し、信号処理機能をインストールすると、プロセスはブロックされることなく実行され続けます。
要約: これまでのところ、信号駆動型 I/O モデルは非同期のニーズにより一致しており、プログラムはデータを待機している間に他のビジネス ロジックを非同期で実行します。 #########しかし! ! !
カーネルからユーザー空間にデータをコピーするプロセス中にもブロックされますが、これは完全な革命 (非同期) ではありません。理想的な (ノード) ノンブロッキング非同期 I/O
理想的な非同期 I/O は、ポーリングを通じてデータを取得する必要がなく、アプリケーションによって開始されるノンブロッキング呼び出しである必要があります。データ コピー フェーズ中に不必要に待つ必要はありませんが、I/O の完了後、シグナルまたはコールバック関数を通じてアプリケーションにデータを渡すことができ、その間にアプリケーションは他のビジネス ロジックを実行できます。実際の非同期 I/O
実際、Linux プラットフォームは非同期 I/O (AIO) をネイティブにサポートしていますが、現時点では AIO は完全ではありません。そのため、Linux で同時実行性の高いネットワーク プログラミングを実装する場合は、主に I/O 多重化モデルが使用されます。 Windows では、真の非同期 I/O は IOCP を通じて実装されます。非同期 I/O のマルチスレッド シミュレーション
はシングルスレッドであるとよく言われますが、実際には、を参照してください。JS はシングルスレッドで実行されるとしか言えません。 *nix または Windows platform の場合、最下層はスレッド プールを使用して I/O 操作を完了します。ノード関連の知識の詳細については、
nodejs チュートリアル
以上がNode のさまざまな I/O モデルについて話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。