Alasan menggunakan API asinkron
Alasan mengapa konsep asinkron menjadi populer di Web2.0 adalah karena JavaScript dieksekusi pada satu utas di browser, dan juga menggunakan utas dengan rendering UI. Ini berarti bahwa rendering dan tanggapan UI berada dalam keadaan stagnan ketika JavaScript dieksekusi. Untuk pengalaman pengguna yang lebih baik, pendekatan asinkron (tentu saja, ini dalam apa yang disebut bahasa utas tunggal) tidak memblokir utas utama dan terus menanggapi operasi pengguna. Ini termasuk dalam kategori pengalaman pengguna.
Demikian pula, jika insinyur dengan pengalaman dalam bahasa lain, tentu saja, pahami bahwa pergantian CPU antara utas membutuhkan banyak waktu (terutama beralih antara konteks dan caching), sehingga meningkatkan efisiensi juga merupakan alasan untuk menggunakan API yang tidak sinkron.
Tentu saja, ini tidak benar, tetapi semua orang mengatakan demikian. Karena jika overhead membuat multithreads kurang dari eksekusi paralel, maka metode multithreading adalah pilihan pertama, yang sering dianggap sebagai tugas pemrosesan intensif CPU.
Singkatnya, API asinkron atau API asinkron dapat dianggap sebagai fitur node, karena itu adalah platform yang berlaku IO asinkron pada lapisan aplikasi dalam skala besar, dan berusaha untuk mengalokasikan sumber daya lebih efisien pada satu utas.
Tentang janji
Di sini, artikel ini tidak bermaksud menjelaskan penggunaan janji secara rinci, tetapi hanya secara singkat menjelaskan beberapa ruang lingkup API dan lingkup janji:
// Menggabungkan fungsi nodeJs 'fs.readdir untuk membuat promisevar asli promisetask = new janji (function (resolve, reject) {fs.readdir ('/var/www ', function (err, file) {if (! Err) {resolve (file);} else {reject (err); {if! {{Resolk);} else {reject (err); {if! Console.log ('Konten adalah:'+file); promisetask.catch (function (err) {console.log ('Kesalahan dilaporkan sebagai:'+err);});Bagaimana cara menunggu beberapa janji untuk diselesaikan?
// Hubungkan promisetask.then di atas (function (file) {var readfilsepromiseList = file.map (function (file, index) {return new janji (function (resolve, reject) {fs.readfile (file, 'uTf-8', function (err, str) {if (er err) {resolve);};}} {err function (err, str) {if. Janji.all (readFilSepromiselist);}). Kemudian (fungsi (filestrarray) {console.log ('yang disebut bacaan file selesai:'+filestrarray);});Kode ini memang menunjukkan keanggunan pengembangan nodeJS.
Jadi apa masalahnya?
Bahasa paling elegan saat ini masih bergantung pada sistem operasi, yaitu keterbatasan sistem masih ada:
Saya tidak tahu apakah kesalahan ini dapat diartikan sebagai pegangan operasi file yang kelelahan, tetapi saya harap Anda dapat memahami artikel ini bahwa sistem operasi tidak dapat membuka beberapa file tanpa batas pada saat yang sama.
Dan ini:
Ini mudah dimengerti, dan ingatannya habis. Tentu saja, batas memori dapat disesuaikan dengan menambahkan dua parameter yang berjalan berikut:
node--max-old-ukuran = 8192 ./index.js #unit mb node--max-new-space-size = 2048 ./index.js #unit kb
Parameter di atas mulai berlaku ketika V8 diinisialisasi dan tidak dapat diubah secara dinamis setelah mereka berlaku.
Banyak orang dapat mengusulkan bahwa kedua batasan ini juga ada dalam bahasa lain. Ya, ada bahasa lain.
Namun, GC yang kuat atau model pemrograman multithreaded dalam bahasa lain dapat memungkinkan para insinyur untuk melepaskannya tepat waktu setelah mengajukan permohonan sumber daya sistem.
Meskipun sumber daya sistem yang tidak perlu dapat dirilis secara manual di nodeJS, dapatkah setiap operasi dalam program referensi dirilis tepat waktu?
Misalnya, paket NodeJS Redis (instalasi NPM REDIS) tidak memberikan metode operasi sinkronisasi.
Ini berarti bahwa lebih banyak kontrol proses diperlukan dalam proses pengembangan. Sayangnya, nodej dalam sistem utamanya tidak baik dalam hal ini, karena tidak ada konsep multi-threading, tidak ada mekanisme penguncian, dan tidak mungkin untuk memasukkan mekanisme semaphore dalam pengertian yang biasa. Hasilnya adalah insinyur tidak tahu kapan harus melepaskan sumber daya secara manual.
Kecuali jika Anda memiliki kontrol mutlak atas proyek Anda, Anda tidak menggunakan paket pihak ketiga yang menggunakan API asinkron.
Oleh karena itu, kesimpulan saat ini adalah bahwa janji hanyalah teknik pengembangan. Memahami ini tidak cocok untuk semua skenario pengembangan.
Meringkaskan
Di atas adalah semua tentang API asinkron node.js dan keterbatasannya. Saya harap artikel ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan pesan untuk berkomunikasi.