Bincangkan punca dan penyelesaian kegagalan asynchronous nodejs

PHPz
Lepaskan: 2023-04-17 16:11:09
asal
704 orang telah melayarinya

Dengan perkembangan pesat sains komputer dan perkembangan pesat Internet, pembangunan aplikasi web telah menjadi semakin popular sejak beberapa tahun kebelakangan ini. Node.js ialah sumber terbuka, persekitaran masa jalan JavaScript merentas platform yang ditulis dalam C++. Ia direka untuk pembangunan aplikasi bahagian pelayan, terutamanya untuk aplikasi web tak segerak dan boleh skala. Node.js digunakan secara meluas dalam bidang pembangunan web, tetapi ia juga mempunyai beberapa masalah. Salah satunya ialah masalah kegagalan tak segerak Node.js Artikel ini akan menganalisis secara mendalam punca masalah ini dan memberikan penyelesaian.

1. Kod tak segerak

Dalam Node.js, kod tak segerak adalah sangat penting, ia membenarkan operasi I/O untuk tidak menyekat kod lain dalam pelayan. Dalam Node.js, kami sering menggunakan fungsi panggil balik untuk mengendalikan nilai pulangan fungsi tak segerak. Contohnya:

fs.readFile('/path/to/file', function (err, data) {
   if (err) throw err;
   console.log(data);
});
Salin selepas log masuk

Dalam contoh ini, fungsi readFile adalah tak segerak, ia membaca fail dan mengembalikan data baca kepada fungsi panggil balik. Apabila fungsi panggil balik dilaksanakan, kita boleh mendapatkan data dibaca daripada fail. Semasa proses ini, kod lain tidak akan disekat.

2. Masalah kegagalan tak segerak

Walau bagaimanapun, kadangkala fungsi tak segerak dalam Node.js tidak sentiasa tak segerak. Apabila kami memproses sejumlah besar data, kadangkala Node.js akan menghentikan pemprosesan tak segerak dan beralih kepada pemprosesan segerak Pada masa ini, masalah kegagalan tak segerak akan berlaku.

Contohnya, kod berikut:

for (var i = 1; i < 100000000; i++) {
    fs.writeFileSync('test' + i + '.txt', 'Hello Node.js', 'utf8');
}
Salin selepas log masuk

Kod ini akan menulis 100 juta fail, tetapi ia diproses secara serentak, yang akan menjejaskan prestasi Node.js secara serius. Dalam kes ini, Node.js tidak boleh mengendalikan acara lain, jadi operasi tak segerak gagal.

Sebab kegagalan tak segerak ialah Node.js menggunakan model gelung peristiwa tak segerak Apabila masa pelaksanaan kod terlalu lama, Node.js akan menghentikan operasi tak segerak dan menggunakan operasi segerak untuk menghalang tugas daripada menduduki. CPU terlalu lama Dan menjejaskan prestasi keseluruhan pelayan.

3. Penyelesaian

Untuk menyelesaikan masalah kegagalan tak segerak Node.js, kami boleh menggunakan penyelesaian berikut:

1 🎜>Pertama sekali, anda boleh Optimumkan kod tak segerak untuk mengelakkan masalah kegagalan tak segerak. Kita boleh menggunakan setImmediate untuk melaksanakan kod tak segerak Fungsi ini dilaksanakan pada tanda seterusnya bagi gelung acara.

Contohnya, kod berikut:

Dalam kod ini, kami melaksanakan fungsi fs.writeFile dalam setImmediate, untuk mengelakkan masalah kegagalan operasi tak segerak.
for (var i = 1; i < 100000000; i++) {
  setImmediate(function() {
    fs.writeFile('test' + i + '.txt', 'Hello Node.js', 'utf8');
  });
}
Salin selepas log masuk

2. Tingkatkan prestasi pelayan

Jika masalah kegagalan tak segerak tidak dapat diselesaikan melalui pengoptimuman kod, kami boleh mempertimbangkan untuk meningkatkan prestasi pelayan. Anda boleh meningkatkan kapasiti CPU dan memori, atau menaik taraf perkakasan pelayan. Ini meningkatkan prestasi keseluruhan pelayan dan mengelakkan isu kegagalan tak segerak.

3. Gunakan proses anak

Jika kedua-dua penyelesaian di atas tidak berfungsi, kita boleh menggunakan modul child_process Node.js untuk menyelesaikan masalah. Modul ini boleh melaksanakan operasi penyegerakan yang memakan masa dalam proses kanak-kanak untuk mengelak daripada menyekat proses utama.

Sebagai contoh, kod berikut:

Di sini kami menggunakan modul child_process untuk memproses operasi penulisan fail dalam proses kanak-kanak.
for (var i = 1; i < 100000000; i++) {
  var child = require('child_process').fork(__dirname + '/fileWriter.js', [i]);
  child.send('write');
}
Salin selepas log masuk

4. Ringkasan

Pemprosesan tak segerak Node.js ialah salah satu daripada banyak cirinya. Tetapi apabila kami memproses sejumlah besar data, masalah kegagalan tak segerak akan berlaku, sekali gus menjejaskan prestasi keseluruhan pelayan. Artikel ini meneroka dengan mendalam punca masalah kegagalan tak segerak Node.js dan menyediakan tiga penyelesaian: mengoptimumkan kod, meningkatkan prestasi pelayan dan menggunakan subproses. Dalam pembangunan sebenar, kita harus memilih penyelesaian yang sesuai berdasarkan situasi sebenar, untuk mengelakkan masalah kegagalan tak segerak dan meningkatkan prestasi keseluruhan pelayan.

Atas ialah kandungan terperinci Bincangkan punca dan penyelesaian kegagalan asynchronous nodejs. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!