Αυτοί είναι προοδευτικά πιο βολικοί τρόποι να εκφράσεις non-blocking δουλειά σε ένα μοναδικό thread, όλοι οδηγούμενοι από κάτω από ένα event loop που τρέχει έτοιμα callbacks ένα τη φορά. Διαχειρίζονται το πότε συνεχίζει ο κώδικας, όχι πολλαπλά threads.
Το event loop
Ένας single-threaded βρόχος διατηρεί μια queue από έτοιμα callbacks. Όταν μια async λειτουργία (timer, I/O) ολοκληρώνεται, το callback της μπαίνει στην queue· ο βρόχος παίρνει το επόμενο και το τρέχει μέχρι το τέλος, μετά επαναλαμβάνει. Τίποτα δεν κάνει preempt ένα callback που τρέχει, οπότε μεγάλη CPU δουλειά μπλοκάρει τα πάντα.
