アクティブサイクル、シンプルでコア!
6081 ワード
TIL
TIL List
Event Loop
アクティビティリングの長さはどうですか.
私の事件の循環に対する比喩
1) Event Loop
イベントループを理解するために、多くのブログや技術書を参考にしたが、「イベントループとは何か」と明確に定義された文章はほとんど見られなかった.
イベント・ループの定義は、それぞれ異なります.共通の説明は次のとおりです.
JavaScriptは、単一スレッドベースの言語です.これは,主スレッドのアクティブループが単一スレッドであるため,主スレッドと呼ばれる.
まず、イベントループの感覚を見つけるために、次のコードを見てみましょう.
console.log("1")
setTimeout(function cb () {
console.log("2")
}, 3000)
console.log("3")
上のコードの実行順序は何ですか?JAvascriptは単一スレッド言語で、1回印刷してsettimeout関数を待って2を印刷して、最後に3を印刷しますか?正解は以下の通りです.
console.log("1")
setTimeout(function cb () {
console.log("2")
}, 3000)
console.log("3")
// 1
// 3
// 2
これは非常に難解な現象だ.結果はさっき説明したのとは違います.ここではアクティブループについての役割です.
2)活動環の長さはどうですか。
アクティブリングは、上の画像と同じ構造を有する.
以下は私が各語について主観的に簡単に説明します.
Heap:変数や関数などのメモリセットの場所
Call Stack:実行コードを格納する場所.これは先入後出(FILO)の構造であり,関数呼び出し時にcallスタックにプッシュされる.
Web API:DOM、Ajax、settimeoutを含むブラウザが提供するAPI
Callback Queue:イベント発生時に実行するコールバック関数が一時的に停止する場所
はい、今私は大体の構造と意義に対して一定の理解があって、コードを見てみます.
console.log("1")
setTimeout(function cb () {
console.log("2")
}, 3000)
console.log("3")
// 1
// 3
// 2
このコードを実行すると、イベントループは次の実行プロセスを実行します.コールスタックには
console.log("1")
個あります.対応するコードを実行します.
console.log("1")
はcallスタックから削除されます.callスタックには
setTimeout
関数が含まれています.setTimeout
関数を実行して、ブラウザが提供するWeb APIを呼び出します.setTimeout
関数はcallスタックから削除されます.コールスタックには
console.log("3")
個あります.対応するコードを実行します.
console.log("3")
はcallスタックから削除されます.setTimeout
関数の3秒後、コールバック関数cb()
はコールバックキューに入る.イベントループcallスタックが空であるかどうかを確認し、callbackキューを確認します.
cb()
関数が見つかり、callスタックに追加されました.対応するコードを実行します.
cb()
関数はcallスタックから削除されます.イベントループのパターンは次のとおりです.
イベントループは、まずcallスタックにスタックされたコードを処理します.非同期関数が中間的に実行される場合、その関数のコールバック関数をコールバックキューにプッシュし、次のコールバックスタックを処理します.callスタックが処理されたら、callbackキューを見つめて処理します.
3)私の事件の循環に対する比喩
活動サイクルを忙しい会社員にたとえたい.
例えば、Aという会社員がやるべきことが1から10まであるとします.
Aが1から10まで順次動作し,1分以内にそれを解決すると仮定する.
Aの机の上で...2...3... 逐次漸進的に書類を蓄積し、事を解決している.
次に、4番ファイルが約3秒以内に考慮すべき問題であると仮定します.
この場合、まず4番を横に置いて次のドキュメントを処理します.
5..6..7..8... やばい、9番の書類は約5秒かかります.
まずは9日も横に置いて10日まで行います
そして4番ファイル、9番ファイルの順に作業を行います.
仕事終わりました!
Reference
この問題について(アクティブサイクル、シンプルでコア!), 我々は、より多くの情報をここで見つけました https://velog.io/@drata313/TIL-2021-05-17テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol