私は頭を包み込み、シングルスレッドブラウザ環境でjavascript asyncがどのように機能するかを理解しようとしています。
非同期として、タイマーと xhr リクエストの両方を処理できます。今、私は以下のようなものを持っているとします
function doStuff() {
for(var i=0; i<100000000; i++) {
// do something to make proc busy
if(i%1000 === 0) {
console.log('in for loop');
}
}
}
setTimeout(function() {
console.log('timed out')
}, 2);
doStuff();
doStuff();
doStuff();
タイマーは非常に小さい値 (2ms) に設定されているため、次のように動作するはずです。
1) タイマー コールバックがキューに入れられる
2)doStuff()
が実行されます (全体として?)、時間がかかります (2 ミリ秒以上)
doStuff()
3) ある実行と別の実行の瞬間があるため、タイマー コールバックが実行されます。
4) 次にdoStuff()
呼び出される
4) 最後doStuff()
に呼び出される
代わりに、doStuff()
タイマー コールバックが発生する前に 3 つのすべての処理が行われていることがわかります。そして、それはそれらの 2ms よりもはるかに長い時間です。はい、この時間の設定値setTimeout
が保証されないことは承知しています。
私の質問は、javascript がどのようにコードを実行するかです。非同期キューから何かが呼び出される前に一度に実行される最小の原子ブロックは何ですか?