Rumah >hujung hadapan web >tutorial js >Mari kita bincangkan tentang pelaksanaan tak segerak dan pemanduan acara dalam Node
Artikel ini akan membawa anda melalui pelaksanaan tak segerak dan pemacu acara dalam Nod Saya harap ia akan membantu anda!
Sesetengah tugasan dalam komputer secara umumnya boleh dibahagikan kepada dua kategori, satu kategori dipanggil IO Intensif, satu dipanggil intensif pengkomputeran; untuk tugas intensif pengkomputeran, prestasi CPU hanya boleh dikuras secara berterusan, tetapi untuk tugas intensif IO, idealnya ini tidak diperlukan, dan hanya peranti IO perlu dimaklumkan untuk pemprosesan . , kembali dan dapatkan data selepas beberapa ketika. [Tutorial berkaitan yang disyorkan: tutorial video nodejs, Video pengaturcaraan]
Untuk sesetengah senario, terdapat beberapa tugasan yang tidak berkaitan yang perlu diselesaikan, semasa arus perdana Terdapat dua kaedah:
node
dan penyelesaiannya diberikan sebelum kedua-duanya: gunakan satu utas untuk menjauhkan diri daripada masalah seperti kebuntuan berbilang benang dan penyegerakan status ; gunakan IO tak segerak untuk membenarkan satu Thread menjauhkan diri daripada menyekat untuk menggunakan CPU dengan lebih baik
Baru dibincangkan
node
Dalam penyelesaian multi-tasking, tetapinode
bukan mudah untuk dilaksanakan secara dalaman, berikut adalah beberapa konsep sistem pengendalian, supaya semua orang dapat memahaminya dengan lebih baik pada masa hadapan , kita akan bercakap tentang pelaksanaan tak segerak dan mekanisme gelung:
IO tidak menyekat: Perbezaannya ialah. bahawa deskriptor fail dikembalikan serta-merta selepas panggilan tanpa menunggu Pada masa ini, kepingan masa CPU boleh digunakan Selepas memproses transaksi lain, keputusan boleh diperolehi melalui deskriptor fail ini; dengan IO yang tidak menyekat: Walaupun ia meningkatkan penggunaan CPU, kerana pulangan segera ialah deskriptor Fail, kami tidak tahu bila operasi IO selesai Untuk mengesahkan perubahan status, kami hanya boleh melakukan operasi pengundian
read
digunakan untuk menilai, yang secara relatifnya lebih murah ialah ia menggunakan tatasusunan 1024 panjang untuk menyimpan status, jadi ia boleh menyemak sehingga 1024 deskriptor fail pada masa yang sama
select
dipertingkatkan kepada kaedah storan senarai terpaut dan segala-galanya pada asasnya adalah sama; tetapi apabila terdapat banyak deskriptor fail, prestasinya masih sangat rendah
poll
select
poll
: Serupa dengan eopll
linux
Walaupun kqueue
epoll
Terdapat juga kaedah AIO di bawah Linux yang menghantar data melalui isyarat atau panggilan balik, tetapi ia hanya tersedia di Linux, dan terdapat sekatan yang tidak boleh menggunakan cache sistem epoll
Pelaksanaan IO tak segerak dalam nod
berbilang benang secara dalaman, kodMari kita bincangkan tentang kesimpulan dahulu
Pelaksanaan IO tak segerak dilaksanakan melalui multi-threading. Apa yang mungkin mengelirukan ialah walaupun
node
Gunakan beberapa utas untuk melaksanakan menyekat IO atau tidak menyekat IO serta teknologi pengundian untuk melengkapkan pemerolehan data, biarkan satu utas melakukan pengiraan dan pemprosesan, dan memindahkan data yang diperoleh daripada IO melalui komunikasi antara utas, yang mudah Dilaksanakan simulasi IO tak segerak.
Selain IO tak segerak, sumber lain dalam komputer juga boleh digunakan, kerana segala-galanya dalam Linux adalah fail, dan hampir semua sumber komputer seperti cakera, perkakasan, dan soket disarikan fail, pengenalan seterusnya kepada panggilan ke sumber komputer mengambil IO sebagai contoh.
Apabila proses bermula, node
akan mencipta gelung serupa dengan while(true)
Setiap kali badan gelung dilaksanakan, kita menjadi Tick
;
Di bawah ialah carta alir gelung acara dalam node
:
Gambar yang sangat ringkas, penjelasan ringkas: ia bermakna setiap kali Dapatkan acara selesai daripada pemerhati IO (ia adalah objek permintaan, pemahaman mudah ialah ia mengandungi beberapa data yang dijana dalam permintaan), dan kemudian terus mengambil acara seterusnya (objek permintaan) jika tiada fungsi panggil balik panggilan balik, laksanakan fungsi panggil balik. Gambar ini menyembunyikan platform yang berkaitan Butiran keserasian, seperti menggunakan
dalam IOCP di bawah Windows untuk menyerahkan status pelaksanaan, mendapatkan permintaan selesai pelaksanaan melaluiyang tiada kaitan dengan IO tak segerak:API tak segerak lain
PostQueuedCompletionStatus()
GetQueuedCompletionStatus
dilaksanakan sendiri di bawaheopll
. Selain IO dan sumber komputer lain yang memerlukan panggilan tak segerak,libuv
Terdapat juga beberapa
setTimtout
setInterval
node
setTimeout
setInterval
Bahagian ini terlebih dahulu menerangkan dua API pertamasetImmediate
Prinsip pelaksanaannya adalah serupa dengan IO tak segerak process.nextTick
dan Pemasa yang dibuat akan dimasukkan ke dalam pokok merah-hitam di dalam pemerhati pemasa Setiap kalidilaksanakan, objek pemasa akan diambil secara berulang daripada pokok merah-hitam dan menyemak sama ada pemasa melebihi
Jika melebihi, acara (objek permintaan) Tolak ke dalam baris gilir acara dan laksanakan fungsi panggil balik dalam gelung acara
setTimtout
setInterval
tick
loo
Atas ialah kandungan terperinci Mari kita bincangkan tentang pelaksanaan tak segerak dan pemanduan acara dalam Node. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!