Mekanisme node asinkron didasarkan pada "peristiwa". Semua I/O, komunikasi jaringan, dan kueri basis data dijalankan dengan cara non-pemblokiran, dan hasil yang dikembalikan diproses oleh loop peristiwa. Node hanya akan memproses satu event pada waktu yang sama, dan segera memasuki loop event untuk memeriksa event selanjutnya setelah selesai. Dengan cara ini, CPU dan memori dapat fokus pada pemrosesan satu hal pada saat yang sama, sambil mencoba mengizinkan I/O yang memakan waktu dan operasi lain untuk dieksekusi secara paralel.
Lingkungan operasi tutorial ini: sistem Windows 7, nodejs versi 16, komputer DELL G3.
NodeJS adalah single-threading. Single-threading memiliki keuntungan sebagai berikut:
sederhana dan
berkinerja tinggi, menghindari overhead perpindahan thread yang sering dan
penggunaan sumber daya yang kecil, penggunaan memori masih sangat rendah dalam kondisi beban
berat -aman, tanpa penguncian, Bagaimana mengatasi masalah konkurensi tinggi seperti membuka kunci dan kebuntuan
?
Node menggunakan IO asinkron dan berbasis peristiwa (fungsi panggilan balik) untuk memecahkan masalah konkurensi tinggi.
Secara umum, solusi konkurensi tinggi akan menyediakan model multi-threading, menyediakan thread untuk setiap logika bisnis, dan mengimbangi overhead waktu panggilan I/O sinkron melalui peralihan thread sistem. Seperti Apache, ada satu thread per permintaan.
NodeJS menggunakan model thread tunggal dan menggunakan metode permintaan asinkron untuk semua I/O untuk menghindari peralihan konteks yang sering. NodeJS mempertahankan antrian peristiwa ketika NodeJS dijalankan; program memasuki loop peristiwa saat mengeksekusi dan menunggu acara berikutnya tiba. , setiap permintaan I/O asinkron akan dikirim ke antrean peristiwa untuk dieksekusi setelah selesai.
Mekanisme asinkron NodeJS berbasis peristiwa. Semua I/O, komunikasi jaringan, dan kueri basis data dijalankan dengan cara non-pemblokiran, dan hasil yang dikembalikan diproses oleh loop peristiwa . Seperti yang ditunjukkan pada gambar:
Proses Node.js hanya akan memproses satu event dalam satu waktu. Setelah selesai, akan langsung masuk ke event loop untuk memeriksa event selanjutnya. Keuntungan dari hal ini adalah CPU dan memori dapat fokus pada pemrosesan satu hal pada waktu yang sama, sambil mencoba untuk memungkinkan I/O yang memakan waktu dan operasi lainnya dijalankan secara paralel. Untuk serangan koneksi berkecepatan rendah, Node.js hanya menambahkan permintaan ke antrian peristiwa dan menunggu respons sistem operasi. Oleh karena itu, tidak ada overhead multi-threading, yang dapat meningkatkan ketahanan aplikasi web dan mencegah serangan berbahaya.
Mekanisme perulangan peristiwa
Yang disebut perulangan peristiwa berarti NodeJS akan menggunakan mekanisme peristiwa untuk menyelesaikan semua operasi asinkron. Ada thread yang terus berulang untuk mendeteksi antrian peristiwa.
Semua logika di NodeJS adalah fungsi panggilan balik peristiwa, sehingga NodeJS selalu berada dalam perulangan peristiwa, dan entri program adalah fungsi panggilan balik dari peristiwa pertama dalam perulangan peristiwa. Fungsi panggilan balik peristiwa dapat mengeluarkan permintaan I/O atau secara langsung memancarkan peristiwa tersebut, dan kembali ke perulangan peristiwa setelah eksekusi. Perulangan peristiwa memeriksa antrian peristiwa untuk peristiwa yang tidak tertangani hingga program berakhir. Perulangan peristiwa NodeJS tidak terlihat oleh pengembang dan diimplementasikan oleh perpustakaan libev. libev terus-menerus memeriksa apakah ada pendengar peristiwa aktif yang dapat dideteksi, dan tidak keluar dari perulangan peristiwa sampai tidak ada pendengar peristiwa yang terdeteksi, dan program berakhir.