ホームページ  >  記事  >  ウェブフロントエンド  >  Node.js のイベント駆動型 model_node.js を素早くマスターする

Node.js のイベント駆動型 model_node.js を素早くマスターする

WBOY
WBOYオリジナル
2016-05-16 15:09:571016ブラウズ

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 のイベント駆動モデルに関するものであり、皆さんの学習に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。