Semua pelajaran Node.js sebelumnya bilang "Node.js non-blocking" tanpa menjelaskan bagaimana. Jawabannya: event loop. Pondasi: call stack + callback queue JavaS
Semua pelajaran Node.js sebelumnya bilang "Node.js non-blocking" tanpa menjelaskan bagaimana. Jawabannya: event loop.
Pondasi: call stack + callback queue
JavaScript punya satu call stack — hanya bisa eksekusi satu thing pada satu waktu. Jadi bagaimana bisa handle ribuan koneksi?
Kode sync langsung jalan di call stack.
Operasi async (I/O, timer) DIDELEGASIKAN ke sistem (libuv).
Saat selesai, callback-nya dimasukkan ke antrian.
Event loop memindahkan callback dari antrian → call stack saat stack kosong.
libuv: mesin di balik event loop
Node.js memakai libuv (library C) untuk menangani async I/O. libuv menjalankan event loop yang memiliki beberapa fase (phase), dan callback dikelompokkan per fase.
Urutan fase event loop. Di antara setiap fase (dan setelah setiap callback), microtask queue (Promise.then, queueMicrotask) dihabiskan dulu sebelum lanjut.
Macrotask vs microtask
Macrotask queue — berisi callback dari timer, I/O, setImmediate, dsb. Diproses per fase.
Microtask queue — berisi Promise.then, queueMicrotask, process.nextTick. Di Node.js, microtask queue dihabiskan DULU sebelum lanjut fase berikutnya.
console.log("A");
setTimeout(() => console.log("timer"), 0);
Promise.resolve().then(() => console.log("promise"));
console.log("B");
// Output:
// A
// B
// promise ← microtask dihabiskan setelah sync code
// timer ← baru macrotask
process.nextTick vs queueMicrotask vs setImmediate
import fs from "fs";
fs.readFile("app.js", () => {
setTimeout(() => console.log("timeout"), 0);
setImmediate(() => console.log("immediate"));
});
// DI dalam I/O callback → immediate SELALU dulu (karena sudah di poll, next phase = check)
Kenapa ini penting
Memahami kenapa setTimeout(fn, 0) tidak benar-benar "0 ms"
Menghindari blocking event loop dengan kode sync berat (pakai Worker Threads)
Debug bug "kenapa callback ini jalan sebelum itu?"
Tahu kapan pakai setImmediate vs setTimeout 0 untuk "jalankan setelah I/O"
Yang akan kamu pelajari
Memahami phases event loop: timers, pending, poll, check, close
Membedakan microtask (process.nextTick, Promise) dan macrotask
Mendiagnosa blocking dan starvation pada event loop
HyperSheets
bagian dari BelajarWeb.dev
🔄
Memperbarui Aplikasi
Versi baru tersedia. Halaman akan dimuat ulang otomatis...