ホームページ > 記事 > ウェブフロントエンド > Nodeのイベントループを1つの記事で理解する
この記事では、Nodejs のイベント ループについて説明します。皆さんが Nodejs のイベント ループを理解できるようにしたいと思っています。これからは、「Nodejs のイベント ループについて話してください」という質問者の魂を恐れることはなくなります。 !
面接中に面接官から「Nodejsのイベントループについて話しましょう」と聞かれることは誰にでもあると思います。
なぜなら、私もこの質問を受けたことがありますが、毎回恥ずかしいからです。
この問題については、さまざまな技術ブログで多く紹介されていますが、私はまったく理解できませんでした。なぜなら、これらの記事は多くの図や用語で始まることが多く、理解する勇気がすぐに消えてしまうからです。 [おすすめの関連チュートリアル: nodejs ビデオ チュートリアル 、プログラミング教育 ]
しかし、面接官はまだそれを理解できません。と聞かなければならないので、涙と歯を食いしばりながら、いくつかのチュートリアルを参照し、自分なりの要約を考え出し、すぐにみんなと共有しました。
一言で言えば、イベント ループは Nodejs が非同期操作を処理するためのメカニズムです。
Js はシングルスレッドですが、なぜ Nodejs は非同期操作を処理できるのでしょうか?
Nodejs はマルチスレッド操作をシステム カーネルに引き渡すためです。
上の図:
##Nodejs は、Js をベースにした賢い子供のようなものです。マルチスレッド操作はそれ自体で実装されますが、マルチスレッド操作はシステム カーネルに任せられます。 #システム カーネルのほとんどはマルチスレッドであり、カーネルの実行はそれほど簡単ではないため、Nodejs は静観して大丈夫でしょうか? 2. なぜイベント ループが必要なのでしょうか? (最初にイベント ループの名前を説明します。Nodejs はイベント駆動型です。いつ何かを行うか、何を行うかはコールバック関数で定義されます。 したがって、コールバック関数は次のことができます。これはイベント処理関数であるため、コールバック関数を管理するメカニズムはイベント ループと呼ばれます;) カーネルは非常に強力なので、Nodejs は気楽にできるでしょうか? いいえ、カーネルの実行が完了した後、Nodejs は対応するコールバック関数を実行する必要があります。 したがって、これらの非同期操作コールバック関数を管理および維持して、ランダムな文字列と競合しないようにするためのメカニズムが必要です。 このようにして効率的に実行されました。だからこそ、---イベント ループ--- が必要なのです。
概要: イベント ループは、Nodejs によって非同期コード コールバックの実行順序を制御するために使用されます。
3. イベント ループを理解するにはどうすればよいですか? ? ヒント 1: 同期タスクは常に非同期タスクより先に実行されます; 非同期 API の分類同期タスクについて詳しく説明する必要はありませんが、ここでは最初に非同期 API について紹介します。 Nodejs の分類: 簡単に理解すると、上記の 3 つの非同期 API について、イベント ループは 3 種類のキューを提供します。 ###奇妙ですか? process.nectTick がないのはなぜですか? あはは、それは process.nectTick 自体がおかしいからです。process.nectTick
process.nectTick は非同期 API に属しますが、イベント ループの一部ではありません。
上の図: これには別の概念が関係します:非同期モジュール!
非同期モジュール
は、この魔法のようなモジュールです。nodejs は、
これは process.nectTick とどの程度関係がありますか?
はい、process.nectTick は非同期モジュールの一部として理解できるためです。
したがって、process.nectTick は常にイベント ループの前に呼び出されます。
(注: Tick
イベント ループを理解する3 つのキューを通過して 1 週間実行し、Tick になろう!)
よし、分かった!
待って...何かが足りないようですか? Promiseはどのように実行されますか?
nextTick キューに加えて、マイクロタスク キューという特別なキューもあります。マイクロタスク キューは主に、Promise コールバック関数の実行を処理するために使用されます。
マイクロタスクキューの実行順序は何ですか?
上の図:
console.log('同步代码')setImmediate(() => { console.log('setImmediate');})setTimeout(() => { console.log('setTimeout');}, 100)Promise.resolve().then(() => { console.log('promise');})process.nextTick(() => { console.log('Tick');})复制代码それでは次回は、具体的なインタビュー事例を組み合わせて、その印刷順序を確認していきます。 ノード関連の知識の詳細については、
nodejs チュートリアル を参照してください。
以上がNodeのイベントループを1つの記事で理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。