Ezek egyre szebb módok a non-blocking munka kifejezésére egyetlen threaden, mindet egy event loop hajtja alul, amely egyesével futtatja a kész callbackeket. Azt kezelik, mikor folytatódik a kód, nem több threadet.
Az event loop
Egy egyszálú loop egy kész callback-queue-t tart fenn. Amikor egy async művelet (timer, I/O) befejeződik, a callbackje betöltődik a sorba; a loop kiveszi a következőt és lefuttatja a végéig, majd ismétel. Semmi sem szakítja meg (preempt) a futó callbacket, így a hosszú CPU-munka mindent blokkol.
[event loop] → callback futtat → I/O befejeződik → callback sorba → következő futtat → ...
