Artikel ini akan membincangkan pelbagai model I/O dalam Nod, dan memperkenalkan model I/O yang menyekat, model I/O yang tidak menyekat dan I/O tak segerak yang tidak menyekat membantu semua orang!
Kami mengambil permintaan rangkaian IO sebagai contoh Pertama, kami memperkenalkan proses biasa pelayan memproses permintaan IO rangkaian lengkap:
.
Aplikasi memperoleh hasil operasi, yang biasanya terdiri daripada dua peringkat berbeza:
Menunggu data siap
Di bawah, kami mengambil fungsi recvfrom
sebagai contoh untuk menerangkan pelbagai model IO
Menyekat panggilan bermakna sebelum hasil panggilan dikembalikan, utas semasa akan digantung dan utas panggilan boleh hanya tunggu selesai semua operasi di peringkat kernel sistem Selepas itu, panggilan akan ditamatkan.
Menyekat I/O menyebabkan CPU menunggu I/O dan membazirkan kepingan masa CPU. Model I/O tidak menyekat (I/O tidak menyekat) Berbanding dengan yang terdahulu,I/O tidak menyekat Kembali terus tanpa data Untuk mendapatkan data, anda perlu cuba membaca data sekali lagi melalui deskriptor fail
Bukan-panggilan menyekat untuk mendapatkan pulangan (Bukan data jangkaan sebenar), kepingan masa CPU boleh digunakan untuk memproses perkara lain, yang boleh meningkatkan prestasi dengan ketara.
Tetapi masalah yang datang dengannya ialah operasi sebelumnya bukanlah I/O yang lengkap, dan hasil yang dikembalikan bukanlah data perniagaan yang dijangkakan, tetapi hanya status panggilan tak segerak. Untuk mendapatkan data yang lengkap, aplikasi perlu berulang kali memanggil operasi IO untuk mengesahkan sama ada operasi ini telah dipanggilPolling Beberapa strategi pengundian biasa adalah seperti berikut
pilih
pungutan suara
ialah mekanisme pemberitahuan acara I/O yang paling berkesan di bawah Linux Jika tiada acara I/O dikesan semasa pengundian, ia akan tidur sehingga berlaku peristiwa untuk membangkitkan benang. Ia benar-benar memanfaatkan pemberitahuan acara dan melaksanakan panggilan balik dan bukannya melintasi pertanyaan (penerangan fail), jadi ia tidak membazir CPU
Ringkasan: Pada asasnya, Undian masih lagi operasi segerak
, kerana aplikasi masih menunggu untuk I/O kembali sepenuhnya, dan semasa menunggu, ia sama ada merentasi keadaan perihalan fail atau tidur untuk menunggu peristiwa itu berlaku. Model I/O dipacu isyarat
Ringkasan: Setakat ini, model I/O dipacu isyarat lebih selaras dengan keperluan tak segerak kami Program ini akan melaksanakan logik perniagaan lain secara tak segerak sementara menunggu data.
Tetapi! ! ! Ia masih disekat semasa proses menyalin data dari kernel ke ruang pengguna, yang bukan revolusi lengkap (tak segerak).
I/O tak segerak ideal kami hendaklah panggilan tidak menyekat yang dimulakan oleh aplikasi, tanpa perlu mendapatkan data melalui tinjauan pendapat , tidak perlu menunggu sia-sia semasa fasa penyalinan data, tetapi selepas I/O selesai, ia boleh dihantar ke aplikasi melalui isyarat atau fungsi panggil balik, di mana aplikasi boleh melaksanakan logik perniagaan lain.
Sebenarnya, platform Linux secara asalnya menyokong I/O tak segerak (AIO), tetapi pada masa ini AIO tidak sempurna, jadi apabila melaksanakan pengaturcaraan rangkaian konkurensi tinggi di bawah Linux, model pemultipleksan I/O digunakan terutamanya.
Di bawah Windows, I/O tak segerak sebenar dilaksanakan melalui IOCP.
Di bawah platform Linux, Node menggunakan kumpulan benang untuk membenarkan beberapa utas melakukan penyekatan I/O atau bukan- menyekat pusingan I/O Pemerolehan data diselesaikan dengan membuat pertanyaan, membenarkan benang berasingan melakukan pengiraan, dan menghantar keputusan I/O melalui komunikasi antara benang, dengan itu merealisasikan simulasi I/O tak segerak.
Malah, lapisan bawah penyelesaian tak segerak IOCP di bawah platform Windows juga dilaksanakan menggunakan kumpulan benang Perbezaannya ialah kumpulan benang yang terakhir dihoskan oleh kernel sistem.
Kita sering mengatakan bahawa Nod adalah satu benang, tetapi sebenarnya ia hanya boleh dikatakan bahawa JS dilaksanakan dalam satu utas, sama ada ia ialah *nix atau platform windows , lapisan bawah menggunakan kumpulan benang untuk menyelesaikan operasi I/O.
Untuk lebih banyak pengetahuan berkaitan nod, sila lawati: tutorial nodejs!
Atas ialah kandungan terperinci Mari kita bincangkan tentang pelbagai model I/O dalam Node. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!