Rumah > hujung hadapan web > Soal Jawab bahagian hadapan > Apakah maksud I/O dalam nodejs

Apakah maksud I/O dalam nodejs

WBOY
Lepaskan: 2022-03-04 15:37:53
asal
2813 orang telah melayarinya

Dalam nodej, "I/O" bermaksud input dan output, biasanya menunjukkan operasi "I/O" boleh dibahagikan kepada pelaksanaan bersiri satu-benang dan pelaksanaan selari berbilang benang. , pemasangan berbenang tunggal dilaksanakan secara berurutan, sebarang kelambatan dalam pelaksanaan akan menyebabkan kod pelaksanaan seterusnya disekat.

Apakah maksud I/O dalam nodejs

Persekitaran pengendalian artikel ini: sistem Windows 10, nodejs versi 12.19.0, komputer Dell G3.

Apakah maksud I/O dalam nodejs?

Ramai orang biasa dengan pelayan Nginx ditulis dalam C tulen dan digunakan sebagai pelayan web dan dalam proksi terbalik kelebihan dari segi perkhidmatan seperti load balancing dan sebagainya. Pelayan Node dan Nginx adalah serupa kerana ia didorong oleh peristiwa.

JavaScript dalam penyemak imbas dilaksanakan pada satu utas, dan ia juga berkongsi urutan yang sama dengan pemaparan UI Apabila JavaScript dilaksanakan, pemaparan UI dan respons harus berada dalam keadaan bertakung. (Jika masa pelaksanaan skrip melebihi 100 milisaat, pengguna akan merasakan halaman tersekat). Apabila menghadapi situasi ini, kami akan memikirkan kaedah tak segerak untuk menghapuskan masalah menunggu ini, dan kami tidak akan memperkenalkan konsep tak segerak dan segerak.

Seterusnya, mari kita lihat dengan lebih dekat ciri I/O NodeJS yang dipacu peristiwa dan tidak menyekat. Memahami perkara ini akan mempunyai kepentingan yang lebih mendalam untuk kita mempelajari pembangunan NodeJS dengan lebih baik dan membina Web berprestasi tinggi. platform.

1 Gambaran keseluruhan operasi I/O:

Operasi I/O sudah biasa kepada mana-mana pembangun Sekarang mari kita bincangkan secara ringkas tentang operasi NodeJS I.O. Operasi I/O dibahagikan kepada: perlaksanaan bersiri berbilang benang; Kedua-dua kaedah mempunyai kelebihan dan kekurangannya sendiri Kos berbilang benang ialah kos tinggi untuk penciptaan benang dan penukaran konteks benang semasa pelaksanaan, dan masalah penyegerakan muka berbilang benang. Pemasangan berbenang tunggal dilaksanakan secara berurutan Sebarang kelambatan dalam pelaksanaan akan menyebabkan kod pelaksanaan seterusnya disekat. Perihalan pelaksanaan bersiri tugas (konsepnya serupa dengan pelaksanaan segerak) dan pelaksanaan tugasan selari adalah seperti berikut:

Apakah maksud I/O dalam nodejs

Gunakan utas tunggal dalam NodeJS untuk menjauhi kebuntuan , Nyatakan isu penyegerakan, gunakan I/O tak segerak untuk menjauhkan benang tunggal daripada disekat, supaya dapat menggunakan CPU dengan lebih baik. I/O tak segerak menjangkakan bahawa panggilan I/O tidak lagi menyekat operasi berikutnya dan memperuntukkan masa menunggu asal untuk penyiapan I/O kepada perniagaan lain yang diperlukan untuk dilaksanakan. ​

Banyak kali sesetengah pembangun keliru tentang konsep asynchronous/synchronous dan blocking/non-blocking, dan kedua-duanya tidak berkaitan. Menyekat I/O bermakna selepas membuat panggilan, anda mesti menunggu sehingga tahap kernel sistem melengkapkan semua operasi sebelum panggilan tamat. I/O yang tidak menyekat kembali serta-merta selepas dipanggil. Mengenai menyekat I/O dan tidak menyekat I/O, terdapat rajah berikut:

Apakah maksud I/O dalam nodejs

2 analisis I/O tak segerak NodeJS:

Gelung peristiwa: Apabila proses bermula, Node akan mencipta gelung yang serupa dengan while(true) Proses setiap pelaksanaan badan gelung dipanggil Tick Proses setiap Tick adalah untuk menyemak sama ada ada masa untuk diproses.

Pemerhati: Terdapat satu atau lebih pemerhati dalam setiap gelung masa Proses menentukan sama ada terdapat peristiwa yang perlu diproses adalah untuk bertanya kepada pemerhati ini sama ada terdapat peristiwa yang perlu diproses.

Objek permintaan: Dalam proses peralihan daripada JavaScript yang memulakan panggilan ke kernel yang melengkapkan operasi I/O, terdapat produk perantaraan, iaitu objek permintaan.

Kumpulan utas I/O: Kumpul permintaan, hantarkannya ke kumpulan utas I/O untuk pelaksanaan, lengkapkan langkah pertama operasi I/O dan masukkan bahagian kedua pemberitahuan panggil balik. (Dalam Windows, selepas operasi I/O dalam kumpulan benang dipanggil, hasil yang diperoleh akan disimpan dalam atribut req->result, dan kemudian PostQueuedCompletionStatus() akan dipanggil untuk memberitahu IOCP bahawa operasi objek semasa telah selesai.)

I/O tak segerak mempunyai angka berikut:

Apakah maksud I/O dalam nodejs

Contoh pengaturcaraan tak segerak NodeJS:

Async Saya telah diperkenalkan sebelum ini konsep berkaitan /O, berikut ialah contoh operasi I/O tak segerak:

var config = require('./config.json');
var fs = require("fs");
var http = require('http');
var url_module = require("url");
http.createServer(function (request, response) {
var key = url_module.parse(request.url).query.replace('key=', '');
switch (request.method) {
   case 'GET':  // Asynchronous Response Generation
       fs.readFile(config.dataPath + key, 'utf8', function(err, value) {
           if (err) {
               // Return File Not Found if file hasn't yet been created
               response.writeHead(404, {'Content-Type': 'text/plain'});
               response.end("The file (" + config.dataPath + key + ") does not yet exist.");
           } else {
               // If the file exists, read it and return the sorted contents
               var sorted = value.split(config.sortSplitString).sort().join('');
               response.writeHead(200, {'Content-Type': 'text/plain'});
               response.end(sorted);
           }
       });
       break;
   case 'POST':  // Synchronously append POSTed data to a file
       var postData = '';
       request
           .on('data', function (data) {
               postData += data;
           })
           .on('end', function () {
               fs.appendFile(config.dataPath + key, postData, function(err) {
                   if (err) {
                       //  Return error if unable to create/append to the file
                       response.writeHead(400, {'Content-Type': 'text/plain'});
                       response.end('Error: Unable to write file: ' + err);
                   } else {
                       //  Write or append posted data to a file, return "success" response
                       response.writeHead(200, {'Content-Type': 'text/plain'});
                       response.end('success');
                   }
               });
           });
       break;
   default:
       response.writeHead(400, {'Content-Type': 'text/plain'});
       response.end("Error: Bad HTTP method: " + request.method);
}
}).listen(config.serverPort);
console.log('synchronous server is running: ', config.serverPort);
Salin selepas log masuk

Pembelajaran yang disyorkan: "tutorial video nodejs"

Atas ialah kandungan terperinci Apakah maksud I/O dalam nodejs. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan