Loading...
Event loop adalah mekanisme yang mengatur bagaimana Node.js mengeksekusi kode, memproses event, menjalankan callback, dan menangani operasi asynchronous. Meskipun Node.js hanya memiliki satu thread utama, event loop membuat Node.js seolah-olah dapat menangani banyak proses secara paralel.
Dengan event loop, Node.js tidak menunggu proses I/O selesai. Ia meneruskan tugas ke sistem (C++ APIs, libuv) dan melanjutkan hal lain sembari menunggu respons.
Cara kerja event loop dapat disederhanakan dalam beberapa fase:
setTimeout() dan setInterval() yang waktunya telah tercapai.setImmediate().socket.on('close').Bayangkan event loop seperti antrian tugas (queue). Setiap callback yang siap dijalankan akan masuk ke antrian, dan event loop mengeksekusinya satu per satu dengan cepat.
┌──────────────────────────┐
│ JavaScript │ (Kode utama berjalan di single thread)
└──────────┬───────────────┘
│
Event Loop
│
┌─────┬────┴───────┬─────┬──────┬────────┐
│Timers│ I/O Callbacks │ Poll │ Check │ Close│ ...
└──────┴──────────────┴──────┴────────────┘
Di luar event loop, Node.js menggunakan libuv yang bertugas mengelola thread pool untuk pekerjaan berat seperti kompresi, hashing, atau file I/O kompleks.
console.log("A");
setTimeout(() => {
console.log("B");
}, 0);
console.log("C");
Outputnya adalah:
A
C
B
Mengapa B belakangan? Karena setTimeout() diproses di fase Timers, dan callback-nya harus menunggu event loop kembali ke fase itu, walaupun delay-nya 0.
Walaupun keduanya terlihat sama, event loop memprosesnya di fase yang berbeda:
Terkadang setImmediate() dijalankan lebih cepat daripada setTimeout(..., 0) tergantung kapan event loop memasuki fase tertentu.
Dengan memahami event loop, kamu bisa:
Event loop adalah inti dari performa Node.js. Mekanisme ini memungkinkan Node.js untuk menangani ribuan permintaan dengan cepat tanpa harus menggunakan banyak thread. Dengan pemahaman yang baik mengenai fase-fase event loop, developer dapat mengoptimalkan aplikasi dan menulis kode asynchronous yang lebih efisien.
“Node.js cepat bukan karena multithread, tapi karena event loop yang cerdas.”