Asingkron I/O & Event

Asinkron I/O & Event

Tidak seperti kebanyakan bahasa backend lainnya operasi fungsi di javascript lebih bersifat asinkrondan banyak menggunakan eventdemikian juga dengan Node.js. Sebelum penjelasan lebih lanjut mari kita lihat terlebih dahulu tentang metode sinkron seperti yang dipakai pada PHP dengan web server Apache.

Introduction1. Node.js1.1. JavaScript Di Server1.2. Node.js In Action2. Asinkron I/O & Event2.1. PHP & Server HTTP Apache2.2. Javascript & Node.js3. Server HTTP Dasar3.1. Menjalankan Server4. Server File Statis5. Pemrosesan Data Form HTML5.1. URL Encode5.2. Multipart Data6. Module npm6.1. Konsep6.2. Paket npm7. ExpressJS7.1. Server File7.1.1. Middleware7.1.2. Akses Server7.2. Server REST8. Database8.1. SQLite8.1.1. Node Sqlite38.1.2. Enkripsi8.1.2.1. sqlcipher8.2. MySQL8.2.1. Node MySQL8.3. MongoDB8.3.1. Node MongoDB8.3.2. Mongoose9. Testing9.1. REST9.2. Automasi10. To Data URI10.1. Penggunaan10.2. todatauri.js10.3. Koneksi MySQL11. Person REST API11.1. Cara Kerja11.2. Server11.3. Pengetesan12. Image Uploader13. Memakai ES614. Tentang PengarangPublished with GitBook

PHP & Server HTTP Apache

Mari kita lihat contoh berikut yaitu operasi fungsi akses ke database MySQL oleh PHP yang dilakukan secara sinkron

$hasil = mysql_query("SELECT * FROM TabelAnggota"); print_r($hasil);

pengambilan data olehmysql_query() diatas akan dijalankan dan operasi berikutnyaprint_r() akan diblok atau tidak akan berjalan sebelum akses ke database selesai. Yang perlu menjadi perhatian disini yaitu proses Input Output atau I/O akses ke database olehmysql_query() dapat memakan waktu yang relatif mungkin beberapa detik atau menit tergantung dari waktu latensi dari I/O. Waktu latensi ini tergantung dari banyak hal seperti

Query database lambat akibat banyak pengguna yang mengaksesKualitas jaringan untuk akses ke database jelekProses baca tulis ke disk komputer database yang membutuhkan waktu...

Sebelum proses I/O selesai maka selama beberapa detik atau menit tersebut state dari prosesmysql_query() bisa dibilang idle atau tidak melakukan apa-apa.

Lalu jika proses I/O di blok bagaimana jika ada request lagi dari user ? apa yang akan dilakukan oleh server untuk menangani request ini ?..penyelesaiannya yaitu dengan memakai pendekatan prosesmultithread. Melalui pendekatan ini tiap koneksi yang terjadi akan ditangani oleh thread. Thread disini bisa dikatakan sebagai task yang dijalankan oleh prosesor komputer.

Sepertinya permasalahan I/O yang terblok terselesaikan dengan pendekatan metode ini tetapi dengan bertambahnya koneksi yang terjadi maka thread akan semakin banyak sehingga prosesor akan semakin terbebani, belum lagi untuk switching antar thread menyebabkan konsumsi memory (RAM) komputer yang cukup besar.

Berikut contoh benchmark antara web server Apache dan Nginx (server HTTP seperti halnya Apache hanya saja Nginx memakai sistem asinkron I/O dan event yang mirip Node.js). Gambar ini diambil dari goo.gl/pvLL4

Bisa dilihat bahwa Nginx bisa menangani request yang jauh lebih banyak daripada web server Apache pada jumlah koneksi bersama yang semakin naik.



Lebih baru Lebih lama