Questi sono modi progressivamente più gradevoli di esprimere lavoro non bloccante su un singolo thread, tutti guidati sotto il cofano da un event loop che esegue le callback pronte una alla volta. Gestiscono quando il codice riprende, non più thread.
L'event loop
Un loop a thread singolo mantiene una coda di callback pronte. Quando un'operazione async (timer, I/O) si completa, la sua callback viene messa in coda; il loop prende la successiva e la esegue fino al termine, poi ripete. Nulla fa preemption di una callback in esecuzione, quindi un lungo lavoro CPU blocca tutto.
