Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Menulis Fungsi Benar-Benar Tidak Menyekat dalam Node.js?

Bagaimana untuk Menulis Fungsi Benar-Benar Tidak Menyekat dalam Node.js?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-04 19:11:13252semak imbas

How to Write Truly Non-Blocking Functions in Node.js?

Cara Yang Betul untuk Menulis Fungsi Tidak Menghalang dalam Node.js

Paradigma tidak menyekat adalah penting dalam Node.js untuk mencapai prestasi tinggi. Walau bagaimanapun, ia boleh mencabar untuk menulis fungsi yang benar-benar tidak menyekat yang tidak menghalang kemajuan gelung acara.

Memahami Tingkah Laku Tidak Menghalang

Membungkus kod dalam Janji tidak semestinya menjadikannya tidak menyekat. Fungsi pelaksana Promise dilaksanakan secara serentak, bermakna kod yang berjalan lama di dalamnya akan menyekat pelaksanaan operasi lain.

Contoh: Fungsi Penyekatan yang Dibungkus Janji

Pertimbangkan fungsi berikut:

function longRunningFunc(val, mod) {
    return new Promise((resolve, reject) => {
        let sum = 0;
        for (let i = 0; i < 100000; i++) {
            for (let j = 0; j < val; j++) {
                sum += i + j % mod;
            }
        }
        resolve(sum);
    });
}

Semasa fungsi ini kembali Janji, kod dalam pelaksana disekat. Gelung peristiwa akan menunggu sehingga kod ini selesai sebelum melaksanakan operasi lain.

Mensimulasikan Asynchronicity dengan setTimeout

Satu pendekatan untuk meniru tingkah laku tidak menyekat dalam kes ini ialah menggunakan setTimeout:

function longRunningFunc(val, mod) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            let sum = 0;
            for (let i = 0; i < 100000; i++) {
                for (let j = 0; j < val; j++) {
                    sum += i + j % mod;
                }
            }
            resolve(sum);
        }, 10);
    });
}

Kod ini menjadualkan gelung jangka panjang untuk dilaksanakan selepas kelewatan 10 milisaat. Walau bagaimanapun, ia masih menyekat dalam tempoh pelaksanaan yang tertangguh itu.

Pendekatan Tidak Menghalang Sebenar

Untuk mencipta fungsi yang benar-benar tidak menyekat, anda perlu menggunakan teknik yang memindahkan kod pelaksanaan di luar Node.js utama benang:

  • Proses Kanak-kanak: Cipta proses berasingan untuk mengendalikan tugasan yang berpanjangan.
  • Benang Pekerja: Gunakan Pekerja eksperimen Ciri benang dalam Node.js untuk mencipta berbilang benang dalam satu proses.
  • Kod Asli: Tulis C atau sambungan kod asli lain yang menggunakan panggilan atau urutan sistem tak segerak.
  • API Tak Segerak Sedia Ada: Leverage tak segerak operasi yang disediakan oleh modul teras Node.js, seperti fail I/O dengan fs.readFile, HTTP permintaan dengan http.get, atau pertanyaan pangkalan data dengan mongoose.connect.

Atas ialah kandungan terperinci Bagaimana untuk Menulis Fungsi Benar-Benar Tidak Menyekat dalam Node.js?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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