ホームページ  >  記事  >  ウェブフロントエンド  >  Nodeのイベントループを1つの記事で理解する

Nodeのイベントループを1つの記事で理解する

青灯夜游
青灯夜游転載
2023-04-06 18:39:262552ブラウズ

この記事では、Nodejs のイベント ループについて説明します。皆さんが Nodejs のイベント ループを理解できるようにしたいと思っています。これからは、「Nodejs のイベント ループについて話してください」という質問者の魂を恐れることはなくなります。 !

Nodeのイベントループを1つの記事で理解する

面接中に面接官から「Nodejsのイベントループについて話しましょう」と聞かれることは誰にでもあると思います。

なぜなら、私もこの質問を受けたことがありますが、毎回恥ずかしいからです。

この問題については、さまざまな技術ブログで多く紹介されていますが、私はまったく理解できませんでした。なぜなら、これらの記事は多くの図や用語で始まることが多く、理解する勇気がすぐに消えてしまうからです。 [おすすめの関連チュートリアル: nodejs ビデオ チュートリアル プログラミング教育 ]

しかし、面接官はまだそれを理解できません。と聞かなければならないので、涙と歯を食いしばりながら、いくつかのチュートリアルを参照し、自分なりの要約を考え出し、すぐにみんなと共有しました。

1. イベント ループとは何ですか?

一言で言えば、イベント ループは 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 は、

libuv

ライブラリを使用してカーネルを呼び出し、マルチスレッド操作。

これは process.nectTick とどの程度関係がありますか?

はい、process.nectTick は非同期モジュールの一部として理解できるためです。

したがって、process.nectTick は常にイベント ループの前に呼び出されます。

? ヒント 2: process.nectTick はすべての非同期タスクの中で最も高速です;

(注: Tick

イベント ループを理解する3 つのキューを通過して 1 週間実行し、Tick になろう!)

よし、分かった!

待って...何かが足りないようですか? Promiseはどのように実行されますか?

約束

nextTick キューに加えて、マイクロタスク キューという特別なキューもあります。マイクロタスク キューは主に、Promise コールバック関数の実行を処理するために使用されます。

マイクロタスクキューの実行順序は何ですか?

上の図:

? ヒント 3: マイクロタスク キューは process.nectTick キューの後ろ、イベント ループの前に追加されます。

上記で多くのことを述べてきましたが、全体として見てみましょう

? ヒント 4: 実践は真の知識をもたらします;

上記を使用してください理論、賢い人なら分析できる 最終的な印刷順序は何ですか?

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 サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。