Anda tahu Node itu. js didasarkan pada model I/O non-pemblokiran yang digerakkan oleh peristiwa. Anda mungkin bertanya-tanya apa artinya sesuatu yang menghalangi atau sesuatu yang tidak menghalangi. Faktanya, ada kedua jenis operasi yang tersedia di Node.js. js. Namun, untuk membuat aplikasi yang berkinerja baik, hanya satu jenis yang harus digunakan
Mengakses sumber daya eksternal
Model operasi pemblokiran atau non-pemblokiran relevan ketika berhadapan dengan operasi input/output. Menulis ke sumber daya atau membaca dari sumber daya dianggap sebagai operasi I/O. Target untuk operasi tersebut dapat berupa apa saja mulai dari file hingga soket jaringan hingga layar hingga keyboard. Sumber daya apa pun yang tidak dapat diakses secara instan pada tingkat instruksi mesin tetapi melibatkan menunggu membutuhkan komunikasi I/O
Memori komputer, di sisi lain, dapat ditangani secara instan dan tidak perlu menunggu. Oleh karena itu, mengakses memori tidak dianggap sebagai operasi I/O. Faktanya, nama memori akses acak [RAM] berasal dari kemampuannya untuk mengakses lokasi mana pun dalam jumlah waktu yang sama terlepas dari lokasi fisiknya.
Pemblokiran
Sumber. Manajemen Proses TechnologyUK
Istilah pemblokiran berasal dari model proses sistem operasi. Sistem operasi multitasking memberi label pada setiap proses dengan keadaan tergantung pada seberapa siap mereka ditempatkan pada CPU untuk dieksekusi. Sebuah proses diberi label diblokir jika tidak siap untuk dieksekusi tetapi malah menunggu acara I/O berlangsung. Peristiwa I/O menunjukkan kemajuan atau penyelesaian dalam operasi I/O, misalnya "sumber daya tersedia" atau "tulis selesai"
Melakukan panggilan sistem pemblokiran menyebabkan proses memasuki keadaan terblokir. Kontrol dibiarkan kembali ke proses hanya setelah kejadian I/O yang sedang ditunggu terjadi
Di Node. js modul sistem file berisi metode fs.xSync
yang menyediakan versi pemblokiran dari operasi sistem file
const fs = require["fs"];
const contents = fs.readFileSync["file.txt", "utf8"];
// this line is not reached until the read results are in
console.log[contents];
Menggunakan versi pemblokiran, panggilan tidak akan kembali sampai I/O selesai. Saat panggilan kembali, ia memberikan hasil untuk operasi sebagai nilai balik. Hasilnya dikembalikan secara sinkron
Panggilan pemblokiran menyebabkan hasil dikembalikan secara sinkron
Non-pemblokiran
Operasi non-pemblokiran tidak menunggu I/O selesai. Ketika operasi pemblokiran menyebabkan proses diletakkan di pembakar belakang pada tingkat sistem operasi, melakukan operasi I/O non-pemblokiran, proses malah terus berjalan. Panggilan non-pemblokiran memulai operasi, membiarkan sistem operasi menyelesaikannya kembali dengan segera tanpa hasil apa pun. Sarana alternatif kemudian digunakan untuk menentukan penyelesaian operasi I/O
Ada beberapa cara untuk mengomunikasikan bahwa operasi I/O non-pemblokiran telah selesai. Program yang berinteraksi lebih dekat dengan sistem operasi menggunakan polling. Dengan polling, program berulang kali meminta dari sistem operasi. apakah operasi I/O telah selesai dan kemudian memproses yang telah. Dalam JavaScript pendekatan lain digunakan dengan callback. Panggilan non-pemblokiran dalam JavaScript menyediakan fungsi panggilan balik yang akan dipanggil saat operasi selesai. Node. js secara internal menggunakan polling tingkat sistem operasi yang dikombinasikan dengan thread pekerja untuk operasi yang tidak mendukung polling. Node kemudian menerjemahkan mekanisme ini menjadi panggilan balik JavaScript
Aplikasi berkinerja menggunakan operasi I/O non-pemblokiran. Ini memungkinkan satu proses untuk melayani banyak permintaan pada saat yang bersamaan. Alih-alih proses diblokir dan menunggu satu operasi I/O selesai, waktu tunggu ini digunakan untuk melayani permintaan lainnya. Semua Node. Pustaka js dan api inti Node menawarkan operasi non-pemblokiran dengan beberapa pengecualian kecil
Contoh sistem file ditulis menggunakan panggilan non-pemblokiran
const fs = require["fs"];
fs.readFile["file.txt", "utf8", [err, data] => {
// called at a later time when the results are in
console.log[data];
}];
// readFile returns immediately and this line is reached right away
_Dalam versi ini, panggilan readFile
segera kembali tanpa hasil apa pun. Blok kode saat ini kembali dan hanya setelah operasi I/O selesai, callback akan dipanggil. Dikatakan bahwa hasilnya dikembalikan secara tidak sinkron
Panggilan non-pemblokiran menyebabkan hasil dikembalikan secara asinkron
Memblokir vs tidak memblokir
Memblokir panggilan menunggu operasi I/O selesai sebelum kembali. Hasilnya dikembalikan secara sinkron. Tidak ada hal lain dalam proses itu yang terjadi selama penantian. Sebaliknya, panggilan non-pemblokiran segera kembali tanpa hasil dan menggunakan sarana alternatif untuk memeriksa penyelesaian. Pemrosesan lain dapat dilakukan sambil menunggu dan hasilnya dikembalikan secara asinkron. Node. Pustaka js dan api inti menyediakan panggilan non-pemblokiran yang dapat digunakan untuk membangun aplikasi berperforma baik. Aplikasi semacam itu memanfaatkan waktu tunggu I/O untuk melayani permintaan lainnya
Node tidak menunggu panggilan database Anda selesai?
Pelajari cara kerja panggilan asinkron dan buat aplikasi Anda berjalan sesuai keinginan. Dapatkan kursus email singkat tentang asinkronisitas dan dua bab dari Selesaikan Aplikasi Node Anda