Ini adalah cara-cara yang secara progresif lebih baik untuk mengekspresikan pekerjaan non-blocking pada satu thread, yang semuanya digerakkan di baliknya oleh sebuah event loop yang menjalankan callback yang siap satu per satu. Mereka mengelola kapan kode dilanjutkan, bukan banyak thread.
Event loop
Sebuah loop single-threaded memelihara sebuah queue berisi callback yang siap. Ketika sebuah operasi async (timer, I/O) selesai, callback-nya di-enqueue; loop mengambil yang berikutnya dan menjalankannya hingga selesai, lalu mengulang. Tidak ada yang men-preempt callback yang sedang berjalan, sehingga pekerjaan CPU yang panjang memblokir segalanya.
