ノードの非同期メカニズムは何に基づいていますか?

青灯夜游
リリース: 2022-07-11 19:18:27
オリジナル
1567 人が閲覧しました

ノードの非同期メカニズムは「イベント」に基づいており、すべての I/O、ネットワーク通信、データベース クエリはノンブロッキング方式で実行され、返された結果はイベント ループによって処理されます。ノードは同時に 1 つのイベントのみを処理し、完了後すぐにイベント ループに入り、後続のイベントを確認します。このようにして、CPU とメモリは、時間のかかる I/O やその他の操作を並行して実行できるようにしながら、同時に 1 つの処理に集中できます。

ノードの非同期メカニズムは何に基づいていますか?

このチュートリアルの動作環境: Windows 7 システム、nodejs バージョン 16、DELL G3 コンピューター。

#NodeJS はシングルスレッドです。シングルスレッドには次の利点があります:

  • シンプル

  • 高パフォーマンス、頻繁なスレッド切り替えのオーバーヘッドを回避

    #​​
  • ##単一スレッドであるためリソース使用量が少なく、高負荷下でもメモリ使用量は依然として非常に低いです

  • スレッドの安全性、ロックなし、ロック解除、デッドロックの問題

高い同時実行性を解決するにはどうすればよいですか?

Node は、非同期 IO とイベント駆動型 (コールバック関数) を使用して、高い同時実行性の問題を解決します。

一般に、高同時実行性ソリューションはマルチスレッド モデルを提供し、ビジネス ロジックごとにスレッドを提供し、システム スレッドの切り替えを通じて同期 I/O 呼び出しの時間オーバーヘッドを補います。 Apache と同様、リクエストごとに 1 つのスレッドがあります。

NodeJS はシングルスレッド モデルを使用し、頻繁なコンテキストの切り替えを避けるためにすべての I/O に非同期リクエスト メソッドを使用します。NodeJS の実行時にイベント キューを維持します。プログラムは実行中にイベントに入ります。ループは待機します。各非同期 I/O リクエストは完了すると、実行を待機するためにイベント キューにプッシュされます。

NodeJS の非同期メカニズムはイベントに基づいています。すべての I/O、ネットワーク通信、データベース クエリはノンブロッキング方式で実行され、返された結果はイベント ループによって処理されます。図に示すように:

ノードの非同期メカニズムは何に基づいていますか?

Node.js プロセスは同時に 1 つのイベントのみを処理します。完了後、すぐにイベント ループに入り、後続のイベントを確認します。 。この利点は、時間のかかる I/O やその他の操作を並行して実行できるようにしながら、CPU とメモリが同時に 1 つの処理に集中できることです。低速接続攻撃の場合、Node.js はイベント キューにリクエストを追加するだけで、オペレーティング システムの応答を待つため、マルチスレッドのオーバーヘッドが発生せず、Web アプリケーションの堅牢性が大幅に向上し、悪意のある攻撃を防ぐことができます。

イベント ループ メカニズム

いわゆるイベント ループとは、NodeJS がイベント メカニズムを使用してすべての非同期操作を解決し、継続的にループするスレッドがあることを意味します。イベントキューを検出します。

NodeJS のすべてのロジックはイベントのコールバック関数であるため、NodeJS は常にイベント ループ内にあり、プログラム エントリはイベント ループ内の最初のイベントのコールバック関数です。イベント コールバック関数は、I/O リクエストを発行するか、イベントを直接発行し、実行後にイベント ループに戻ります。イベント ループは、プログラムが終了するまで、イベント キューに未処理のイベントがないかチェックします。 NodeJS のイベント ループは開発者には見えず、libev ライブラリによって実装されます。libev は、検出できるアクティブなイベント リスナーがあるかどうかを常にチェックし、イベント リスナーが検出されなくなるまでイベント ループを終了せず、プ​​ログラムが終了します。

ノードの非同期メカニズムは何に基づいていますか?

ノード関連の知識の詳細については、

nodejs チュートリアル を参照してください。

以上がノードの非同期メカニズムは何に基づいていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート