Node.js のイベント ループ (EventLoop) の詳細な紹介 (コード付き)

不言
リリース: 2018-08-20 09:53:22
オリジナル
1481 人が閲覧しました

この記事では、js でのイベント ループ (EventLoop) について詳しく説明します (コード付き)。必要な方は参考にしていただければ幸いです。

まえがき

イベントループを学ぶ前に、js のシングルスレッドと非同期性について復習する必要があります。
js はシングルスレッドですが、ブラウザーと Node.js で適切に処理されます。ブラウザーの Web ワーカー (ワーカー スレッド) や Node の child_process (子プロセス) などです。それらの出現により、大量の計算の分解が容易になりました。

イベントループ

プロセスが開始されると、Node は内部オブザーバーを使用して、処理する必要のあるイベントがあるかどうかを確認し、イベントとそれに関連するコールバック関数を作成します。実行のために取り出された後、次のループに入り、それ以上ない場合はプロセスを終了します。

ブラウザのイベントループ

メインスレッドUIのレンダリングをブロックしないように、ブラウザのワーカースレッドに非同期イベントを入れます

  console.log('进程开始')
  const ajax = new XMLHttpRequest()
  ajax.addEventListener('load', () => {
    console.log('load')
  })
  ajax.addEventListener('loadend', () => {
    if (ajax.readyState == 4 && ajax.status == 200) {
      console.log('ajax success')
      } else {
      console.log('ajax success')
      }
  })
  ajax.open('get', 'http://localhost/study/html/vue.js')
  ajax.send()
  setTimeout(() => {
    console.log('setTimeout')
  }, 300)
  fetch('http://localhost/study/html/demo.json',{
    headers: {
      'content-type': 'application/json'
    }
  }).then(res => {
    console.log('fetch')
  })
  let i = 0
  while(i < 10000) {
    i++
  }
  console.log(i)
  console.log(&#39;进程结束&#39;)
ログイン後にコピー

結果から、3つの非同期プロセスが実行をブロックしていないことがわかりますajax、fetch、setTimeout はコード処理が終了した順序に従ってコールバック関数を実行します。

Nodejsのeventloop

Node内のイベントループはオブザーバーの優先度に従って実行されます

setTimeout(() => {
  console.log('setTimeout')
}, 0)
setImmediate(() => {
  console.log('setImmediate1')
  process.nextTick(() => {
    console.log('setImmediate1 插入nextTick')
  })
})
setImmediate(() => {
  console.log('setImmediate2')
})
process.nextTick(() => {
  setTimeout(() => {
    console.log('nextTick1 setTimeout')
  }, 100)
  console.log('nextTick1')
})
process.nextTick(() => {
  console.log('nextTick2')
})
console.log('正常执行')
ログイン後にコピー

イベントループの実行この特性は、マルチスレッドのデッドロック、状態の同期、その他の問題を回避するためにシングル スレッドを使用することに由来します。これにより、シングル スレッドがブロックされるのを防ぎ、CPU を効率的に使用できます。

関連する推奨事項:

JavaScriptのイベントループメカニズムを詳しく説明する - レクチャー2


Node.jsのイベントループとコールバック関数を深く理解する

以上がNode.js のイベント ループ (EventLoop) の詳細な紹介 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!