#23.非同期プログラミング(5)
1181 ワード
非同期プログラミング(5)
今日から次の授業まで、非同期タスクの処理に関する深化内容を理解してみましょう.
コールバックキューの優先度
私が学んだことを基礎にします.
次のコードの実行順序を推定してみましょう.
setTimeout(() => console.log('1'), 0);
Promise.resolve('2').then(res => console.log(res))
setTimeout(() => console.log('3'), 0);
Promise.resolve('4').then(res => console.log(res))
Promise.resolve('5').then(res => console.log(res))
setTimeout(() => console.log('6'), 0);
// 실행 결과: 2 4 5 1 3 6
結果を見るとpromiseが最初に出力し、settimeout出力が表示されます.なぜこのような結果が出たのか見てみましょう.
バックグラウンドスレッドで非同期操作が完了すると、非同期操作のコールバックがコールバックキューに入ります.この状態で、プライマリ・スレッド内のすべてのタスクが終了し、callスタックが空の場合、イベント・ループは、コールバック・キュー内のタスクをプライマリ・スレッドのcallスタックにインポートし、コールバックを実行します.
実際、この説明には欠点がある.
callbackはcallbackキューに入ったことのみを示し、実際にcallbackキューはtaskキュー、microtaskキューに大別される.
このマイクロタスクキューはpromiseの空間であり、taskキューはsettimeoutの空間である.また、このキューの間には優先度があります.もちろん、マイクロタスクキューの優先度はもっと高いです.
したがって、上記の例はまずpromissionを出力する.
(上の写真のAnimation Framesが何なのか分かりません)
今日はこれで終わります.次の授業では、非同期操作を実行する方法について説明します.
Reference
この問題について(#23.非同期プログラミング(5)), 我々は、より多くの情報をここで見つけました https://velog.io/@2lang/23.-비동기-프로그래밍5-zwvc5vfgテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol