イベントポーリングとノードでの非同期コードの実行
世界只因有你
世界只因有你 2017-07-05 10:39:22
0
2
870

ノードのメイン スレッドは js コードを実行します。非同期操作の場合、ノードはそれを libuv に渡して実行し、非同期操作の背後でコードを実行します。 libuv が実行されると、循環キューに配置されます。libuv には while(true) と同様のイベント ループ (イベント ループ) があり、このイベント ループはノードの単一スレッド (つまり、メイン スレッド) に存在します。 . メインスレッドはイベント実行コールバック関数を取得します。
それでは、メインスレッドがループしてイベントを取得し、その背後で非同期コードを実行するプロセスは何でしょうか?スレッドが 2 つのことを同時に実行することは不可能です。非同期コードを実行した後、CPU はアイドル状態のときにループしてイベントをフェッチしますか?

世界只因有你
世界只因有你

全員に返信(2)
过去多啦不再A梦

まず、コードの実行時にメインスレッドがポーリングしないことを明確にしてください。
したがって、メインスレッドは、イベントキューをポーリングする前にすべての初期コード(非コールバックコード)を実行します(イベントキューは、ポーリングされるときにJSオブジェクトと見なすことができます)。理論上、JSエンジンのメインスレッドは認識することしかできないためです。 jsコード。
ただし、最初のコードが実行された後、js メインスレッドはイベントをポーリングします。コールバック関数が取得されると、js エンジンは再度ポーリングする前に現在のコールバック コードを実行します。
要約すると、実行するコードがない場合、js エンジンのみがポーリングします。つまり、js メインスレッドには常に 1 つのコールバック関数しか存在しません。

いいねを押す +0
typecho


この記事であなたの疑問が解決できると思います

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート