Këto janë mënyra progresivisht më të bukura për të shprehur punë non-blocking në një thread të vetëm, të gjitha të drejtuara poshtë nga një event loop që ekzekuton callback-et gati një nga një. Ato menaxhojnë kur kodi rifillon, jo thread-e të shumta.
Event loop
Një loop me një thread mban një queue callback-esh gati. Kur një operacion async (timer, I/O) përfundon, callback-u i tij vihet në radhë; loop-i merr të radhësin dhe e ekzekuton deri në përfundim, pastaj përsërit. Asgjë s'e paraprin një callback që ekzekutohet, kështu që punë e gjatë CPU bllokon gjithçka.
[event loop] → ekzekuto callback → I/O mbaron → vë në radhë callback → ekzekuto tjetrin → ...
