Event loop — resume vs sync block

Cùng 3 handler, 1 loop (1 thread JS). Trái: mỗi handler await I/O → nhả loop. Phải: handler #2 sync ôm loop vài tick → resume khác phải chờ. ← bài viết · coroutine

await = suspend + xếp resume khi I/O xong
sync block = ôm loop → không ai được resume, kể cả I/O đã về
Chậm · chỉ 1 handler ôm loop mỗi lúc

Await — loop rảnh khi chờ

I/O xong → continuation vào microtask / ready. Loop lần lượt resume. Ba handler đều tiến.

Event loop1 thread
rảnh
Ready / micro
Đang await I/O

Bấm Chạy.

tick 0

Sync block — ôm loop

H2 chạy CPU sync dài. H1/H3 I/O có thể đã xong nhưng chưa resume đến khi H2 nhả.

Event loop1 thread
rảnh
Ready / micro
Đang await I/O

Bấm Chạy.

tick 0

ôm loop (sync / CPU) sync block dài await I/O (đã nhả loop) ready — chờ loop resume done

Đơn giản hóa: gộp macrotask I/O completion → “ready”. Ý chính: settle Promise chỉ xếp hàng resume; loop đang bận sync thì hàng đứng.