Bab 1 dari 7 · 25 menit
Pengenalan dan Arsitektur Node.js
Node.js adalah lingkungan eksekusi JavaScript sisi server yang dibangun di atas mesin JavaScript V8 milik Google Chrome dan pustaka I/O asinkron libuv. Sebelum kehadiran Node.js pada tahun 2009 oleh Ryan Dahl, model komputasi web server konvensional umumnya mengalokasikan satu thread terpisah untuk setiap koneksi yang masuk. Pendekatan berbasis thread tersebut memakan banyak alokasi memori ketika ribuan koneksi dibuka secara bersamaan.
Arsitektur Node.js terdiri atas beberapa lapisan utama:
- Kode aplikasi dan modul pustaka yang kamu tulis.
- Lapisan API inti Node.js seperti
fs,http,path, danevents. - Lapisan binding C++ yang menghubungkan kode JavaScript ke pustaka tingkat rendah.
- Mesin eksekusi V8 dan pustaka libuv yang menjalankan abstraksi sistem operasi.
V8 bertugas mengompilasi kode JavaScript langsung menjadi instruksi bahasa mesin menggunakan teknik Just-In-Time (JIT) compilation serta mengelola pengalokasian memori dan garbage collection. Di sisi lain, libuv menyediakan implementasi event loop serta thread pool latar belakang.
Event loop beroperasi dalam model single-thread untuk thread utama aplikasi. Setiap kali ada tugas I/O non-blocking seperti permintaan socket jaringan atau panggilan berkas, pengerjaannya diserahkan ke kernel sistem operasi atau thread pool milik libuv. Thread pool ini memiliki kapasitas default sebanyak empat worker thread yang dapat kamu atur melalui variabel lingkungan UV_THREADPOOL_SIZE.
Dalam satu siklus iterasi, event loop melewati enam fase bertahap secara berurutan:
- Timers: Mengeksekusi callback dari
setTimeoutdansetIntervalyang waktunya telah tercapai. - Pending Callbacks: Mengeksekusi callback I/O yang ditunda dari iterasi siklus sebelumnya.
- Idle / Prepare: Fase koordinasi internal Node.js.
- Poll: Mengambil event I/O baru dan mengeksekusi penangan callback-nya. Ini adalah fase yang paling sibuk.
- Check: Menjalankan callback yang didaftarkan secara khusus melalui
setImmediate. - Close Callbacks: Menjalankan penutupan koneksi seperti pada peristiwa penutupan socket.
Selain fase-fase tersebut, terdapat dua antrean berprioritas tinggi yang dieksekusi di antara perpindahan fase, yaitu process.nextTick() dan antrean microtask Promise. Kode yang menumpuk di dalam antrean ini akan selalu diselesaikan sebelum event loop melompat ke fase berikutnya. Pemahaman perbedaan kode blocking yang menghentikan eksekusi thread dan non-blocking yang meneruskan alur eksekusi merupakan pondasi utama dalam membangun aplikasi berdaya tampung tinggi.
Cek pemahaman
1. Pustaka C tingkat rendah yang bertanggung jawab menyediakan event loop dan mengelola thread pool di Node.js adalah...
2. Operasi I/O socket jaringan dan HTTP di Node.js membebani thread pool libuv secara default.
3. Fase event loop yang bertugas memproses callback yang didaftarkan melalui fungsi setImmediate adalah...


