Rumah  >  Artikel  >  hujung hadapan web  >  Perbincangan tentang prestasi IO tak segerak bagi Node.js_node.js

Perbincangan tentang prestasi IO tak segerak bagi Node.js_node.js

WBOY
WBOYasal
2016-05-16 16:34:411203semak imbas

Python dan Ruby juga mempunyai rangka kerja sedemikian, tetapi kerana perpustakaan yang mengandungi kod penyegerakan tidak dapat dielakkan digunakan dalam penggunaan sebenar, mereka belum dewasa Sebelum Node.js, pengaturcaraan bahagian pelayan JavaScript hampir kosong mampu membina pangkalan kod di mana semua IO adalah tak segerak.

Hambatan kebanyakan aplikasi web ialah IO, iaitu cakera membaca dan menulis, rangkaian membaca dan menulis serta pangkalan data membaca dan menulis. Strategi apa yang perlu digunakan untuk menunggu tempoh masa ini menjadi titik utama untuk meningkatkan prestasi.

Strategi PHP: jalankan berbilang proses dan terus tunggu IO selesai. Kelemahan: Pelbagai proses menggunakan berbilang salinan memori, menjadikannya sukar untuk berkongsi data antara proses.
Strategi C/C biasa: dijalankan dalam berbilang urutan, dan program mengekalkan status kunci dengan sendirinya. Kelemahan: kos pembangunan yang tinggi, mudah ralat dan sukar dinyahpepijat.
Python (Tornado): Pelbagai permintaan dilaksanakan secara bergilir-gilir dalam satu proses, bertukar kepada permintaan lain apabila IO ditemui. Kelemahan: Masih bukan penggunaan masa yang paling cekap untuk satu permintaan.
Apakah "penggunaan masa yang paling cekap"? Sebagai contoh, terdapat dua pertanyaan pangkalan data yang tidak berkaitan Dalam PHP, satu biasanya dilaksanakan terlebih dahulu, dan kemudian yang kedua dilaksanakan selepas pelaksanaan selesai (jumlah masa adalah b. Jelas sekali ini bukan yang paling cekap, dan kedua-dua pertanyaan itu hendaklah dilaksanakan pada masa yang sama ialah maks(a, b).

Masalah dengan Python dan bahasa lain yang menyokong multi-threading ialah pada peringkat bahasa, adalah sukar bagi pengaturcara untuk memberitahu mesin maya bahawa dua operasi harus dilakukan pada masa yang sama Walaupun terdapat a Caranya, ia agak menyusahkan, dan kebanyakan orang terlalu malas untuk menggunakannya (Tidak berbaloi untuk menggunakannya). Dan kerana Node.js dengan tergesa-gesa memaksa semua IO untuk dilaksanakan secara tidak segerak, pengaturcara Node.js juga boleh dikatakan biasa dengannya Dengan beberapa perpustakaan yang meningkatkan kebolehbacaan kod (janji, async), mereka boleh dengan mudah membuat operasi yang tidak berkaitan dilaksanakan secara selari. .

Pelaksanaan IO tak segerak telah dibincangkan di atas, jadi apakah kelebihan IO tak segerak? Malah, IO asynchronous tidak boleh mengurangkan tekanan pada pelayan secara ajaib Jika anda perlu menambah pelayan, anda masih perlu menambah pelayan Walau bagaimanapun, IO tak segerak akan mengurangkan masa satu permintaan dan menghapuskan masa menunggu yang tidak bermakna permintaan tunggal. Oleh itu, bilangan permintaan yang diproses setiap unit masa tidak berubah, tetapi masa pemprosesan setiap permintaan telah berkurangan. Dari perspektif ini, pelayan juga menyimpan beberapa sumber - iaitu memori yang digunakan dengan mengekalkan sambungan untuk setiap permintaan.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn