ノードのメイン スレッドは js コードを実行します。非同期操作の場合、ノードはそれを libuv に渡して実行し、非同期操作の背後でコードを実行します。 libuv が実行されると、循環キューに配置されます。libuv には while(true) と同様のイベント ループ (イベント ループ) があり、このイベント ループはノードの単一スレッド (つまり、メイン スレッド) に存在します。 . メインスレッドはイベント実行コールバック関数を取得します。
それでは、メインスレッドがループしてイベントを取得し、その背後で非同期コードを実行するプロセスは何でしょうか?スレッドが 2 つのことを同時に実行することは不可能です。非同期コードを実行した後、CPU はアイドル状態のときにループしてイベントをフェッチしますか?
まず、コードの実行時にメインスレッドがポーリングしないことを明確にしてください。
したがって、メインスレッドは、イベントキューをポーリングする前にすべての初期コード(非コールバックコード)を実行します(イベントキューは、ポーリングされるときにJSオブジェクトと見なすことができます)。理論上、JSエンジンのメインスレッドは認識することしかできないためです。 jsコード。
ただし、最初のコードが実行された後、js メインスレッドはイベントをポーリングします。コールバック関数が取得されると、js エンジンは再度ポーリングする前に現在のコールバック コードを実行します。
要約すると、実行するコードがない場合、js エンジンのみがポーリングします。つまり、js メインスレッドには常に 1 つのコールバック関数しか存在しません。
この記事であなたの疑問が解決できると思います