ホームページ > 記事 > ウェブフロントエンド > Node.js のイベント駆動型 model_node.js を素早くマスターする
1. 従来のスレッドネットワークモデル
Node.js のイベント駆動型モデルを理解する前に、まず従来のスレッド ネットワーク モデルを理解します。リクエストが Web サーバー (IIS、Apache) に入った後、スレッド プールにスレッドが割り当てられ、リクエストの処理が完了します。リクエストの処理が完了してレスポンスが発行され、完了後にスレッド プールがリサイクルされるまで、直線的かつ同期的に実行されます。
これにより、次の問題が発生します:
1. スレッド プール内のスレッドの数が限られているため、頻繁なリクエストが待機することになり、ひどい場合にはサーバーがハングアップすることもあります。
2. 高い同時実行性を実現するために、ダーティ データが表示されるのを防ぐためにロックが使用されます。これにより、一部のスレッドが待機することになり、非効率的になります。
2. イベント駆動型モデル
1. Node.js にはイベント キューがあり、各タスクはイベント キューに置かれ、その結果を処理するためにコールバック関数が残ります (個人的には、RunLoop に少し似ています)。 ios) は、コールバック関数が存在しなくなるまで、タスク内のイベント キューを処理します。2. ノンブロッキングの場合、コールバック付き関数としてイベントキューに入れられ、イベントループスレッド内で取り出して実行されます。
3. 実行中に I/O ブロックが発生した場合 (ファイルの読み取り、データベースのクエリ、ソケットの要求、リモート サービスへのアクセスなど)、イベント ループ スレッドは結果の待機を停止せず、キューの実行を継続します。の次のタスクはイベント ループ スレッドでは実行されません。関数が実行されると、Node.js はコールバック関数をイベント キューに配置し、その順序は関数が完了するまでの時間によって決まります。
4. 1 で述べたように、I/O ブロッキングが発生した場合、ループ スレッドは結果を待機せず、代わりにキュー内の次のタスクを実行します。
Node.js はイベント コールバックを使用して、I/O をブロックする待機を回避し、バックグラウンドでスレッド プールを実装します。I/O ブロック タスクが発生すると、スレッド プールからスレッドを取得し、関数とコールバックを配置します。そこで実行されると、ブロックされたスレッド上で実行されるコールバック関数は引き続きイベント キューにイベントを追加できます。
上記はすべて Node.js のイベント駆動モデルに関するものであり、皆さんの学習に役立つことを願っています。