ノードの非同期メカニズムは「イベント」に基づいており、すべての I/O、ネットワーク通信、およびデータベース クエリはノンブロッキング方式で実行され、返された結果はイベント ループによって処理されます。ノードは同時に 1 つのイベントのみを処理し、完了後すぐにイベント ループに入り、後続のイベントを確認します。このようにして、CPU とメモリは、時間のかかる I/O やその他の操作を並行して実行できるようにしながら、同時に 1 つの処理に集中できます。
このチュートリアルの動作環境: Windows 7 システム、nodejs バージョン 16、DELL G3 コンピューター。
NodeJS はシングルスレッドです。
シンプルで
パフォーマンスが高く、頻繁なスレッド切り替えのオーバーヘッドが回避され、
リソースの使用量が少ないため、高負荷状況でもメモリ使用量が非常に低くなります
。 -安全、ロックなし、ロック解除やデッドロックなどの同時実行性の高い問題を解決するにはどうすればよいですか
?
ノードは、非同期 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 は、検出できるアクティブなイベント リスナーがあるかどうかを常にチェックし、イベント リスナーが検出されなくなるまでイベント ループを終了せず、プログラムが終了します。