#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が何なのか分かりません)
今日はこれで終わります.次の授業では、非同期操作を実行する方法について説明します.