Rumah  >  Artikel  >  hujung hadapan web  >  Membawa anda memahami IO tak segerak tidak menyekat dalam Nodejs

Membawa anda memahami IO tak segerak tidak menyekat dalam Nodejs

青灯夜游
青灯夜游ke hadapan
2022-12-07 18:12:222431semak imbas

Artikel ini akan membincangkan pelbagai model I/O dalam Node, dan memperkenalkan jiwa Node—tidak menyekat IO tak segerak, saya harap ia akan membantu semua orang.

Membawa anda memahami IO tak segerak tidak menyekat dalam Nodejs

[Cadangan tutorial berkaitan: tutorial video nodejs, Pengajaran pengaturcaraan]

Kami meminta IO sepanjang rangkaian Sebagai contoh, mula-mula memperkenalkan proses biasa pelayan memproses permintaan IO rangkaian lengkap:

Membawa anda memahami IO tak segerak tidak menyekat dalam Nodejs

Aplikasi memperoleh hasil operasi, yang biasanya merangkumi dua peringkat berbeza:

  • Menunggu data siap

  • Salin data dari kernel ke proses

Di bawah, kami ambil recvfrom berfungsi sebagai contoh untuk menerangkan Terangkan pelbagai model IO

Menyekat I/O Model (menyekat I/O)

Menyekat panggil Ya Ini bermakna sebelum hasil panggilan dikembalikan, utas semasa akan digantung, dan utas panggilan hanya akan tamat selepas menunggu selesai semua operasi pada peringkat kernel sistem.

Menyekat I/O menyebabkan CPU menunggu I/O, yang membazirkan kepingan masa CPU.

Membawa anda memahami IO tak segerak tidak menyekat dalam Nodejs

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

Membawa anda memahami IO tak segerak tidak menyekat dalam Nodejs

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 dipanggil

Polling Beberapa strategi pengundian biasa adalah seperti berikut

Sibuk mengundi

Ini adalah cara yang paling primitif dan berprestasi paling rendah. Ia menyemak status I/O melalui panggilan berulang untuk mendapatkan data lengkap

Membawa anda memahami IO tak segerak tidak menyekat dalam Nodejs

Kelebihan: Pengaturcaraan mudah

Kelemahan: CPU sentiasa digunakan dalam tinjauan pendapat, yang juga menjejaskan prestasi pelayan, kerana pelayan masih perlu bertindak balas selepas anda membuat tinjauan pendapat

Model pemultipleksan I/O (pemultipleksan I/O)

Membawa anda memahami IO tak segerak tidak menyekat dalam Nodejs

Dalam model pemultipleksan I/O, ia akan digunakan fungsi Pilih atau Tinjauan atau fungsi Epoll (disokong oleh kernel selepas Linux 2.6), kedua-dua fungsi ini juga akan menyebabkan proses disekat, tetapi ia berbeza daripada menyekat I/O.

Ketiga-tiga fungsi ini boleh menyekat berbilang operasi I/O pada masa yang sama, dan boleh mengesan fungsi I/O berbilang operasi baca dan berbilang operasi tulis pada masa yang sama sehingga data boleh dibaca atau ditulis Fungsi operasi I/O sebenarnya dipanggil.

Perbezaan antara tiga mekanisme pemultipleksan I/O adalah seperti berikut

  • pilih

Disebabkan memilih Tatasusunan 1024 panjang digunakan untuk menyimpan status fail, jadi sehingga 1024 deskriptor fail boleh dikesan serentak

  • pungutan suara

Sedikit bertambah baik berbanding dengan pilihan Penggunaan senarai terpaut mengelakkan had panjang 1024 dan mengelakkan semakan traversal yang tidak diperlukan. >epoll/ kqueue

  • 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 membazirkan CPU

Ringkasan: Pada dasarnya, Polling masih merupakan operasi segerak, kerana aplikasi masih menunggu I/O untuk kembali sepenuhnya semasa tempoh menunggu, ia sama ada merentasi keadaan perihalan fail atau tidur untuk menunggu peristiwa itu berlaku.

Model I/O dipacu isyarat (I/O dipacu isyarat)

Membawa anda memahami IO tak segerak tidak menyekat dalam Nodejs

Dalam I/O dipacu isyarat model Dalam , aplikasi menggunakan isyarat untuk memacu I/O dan memasang fungsi pemprosesan isyarat Proses terus berjalan tanpa menyekat.

Apabila data sedia, program akan menerima isyarat SIGIO dan boleh memanggil fungsi operasi I/O dalam fungsi pemprosesan isyarat untuk memproses data.

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 (Nod) Ideal (Nod)

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.

Membawa anda memahami IO tak segerak tidak menyekat dalam Nodejs

I/O tak segerak sebenar

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.

Simulasi berbilang benang bagi I/O tak segerak

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 untuk melakukan pengiraan, dan menghantar keputusan I/O melalui komunikasi antara utas, sekali gus 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 Membawa anda memahami IO tak segerak tidak menyekat dalam Nodejs. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:juejin.cn. Jika ada pelanggaran, sila hubungi admin@php.cn Padam