Rumah  >  Artikel  >  hujung hadapan web  >  Analisis ringkas Node.js menggunakan worker_threads multi-threads untuk pemprosesan selari

Analisis ringkas Node.js menggunakan worker_threads multi-threads untuk pemprosesan selari

青灯夜游
青灯夜游ke hadapan
2022-03-17 19:58:174627semak imbas

Bagaimana untuk menggunakan Node.js untuk pemprosesan selari? Artikel berikut akan memperkenalkan kepada anda kaedah menggunakan Nod untuk multi-threading untuk pemprosesan selari saya harap ia akan membantu anda!

Analisis ringkas Node.js menggunakan worker_threads multi-threads untuk pemprosesan selari

Ramai orang nampaknya tidak memahami cara NodeJS satu benang boleh bersaing dengan hujung belakang berbilang benang.

Untuk mengetahui sebabnya, kita perlu memahami maksud sebenar Nodejs menjadi satu benang.

JavaScript sendiri pada asalnya dicipta untuk melakukan perkara mudah seperti mengesahkan borang, membuat respons, dsb. Sehingga tahun 2009, Ryan Dahl, pencipta Node.js, membuat penulisan kod sisi pelayan dalam JavaScript sebagai pilihan popular mungkin.

Bahasa sebelah pelayan yang menyokong multithreading mempunyai pelbagai struktur dan binaan untuk menyegerakkan antara benang dan ciri berorientasikan benang lain.

Menyokong perkara ini bermakna JavaScript perlu menukar keseluruhan bahasa, yang bertentangan dengan idea pencipta JavaScript. Jadi, untuk membuat JavaScript tulen menyokong multithreading, Dahl terpaksa mencipta penyelesaian. Mari lihat!


Bagaimana Node.js berfungsi?

Node.js menggunakan dua jenis utas: utas utama dikendalikan oleh gelung peristiwa dan beberapa utas sekunder dalam kumpulan utas pekerja.

Gelung PeristiwaMekanisme Node.js untuk mengendalikan operasi I/O yang tidak menyekat - walaupun JavaScript adalah satu utas - ia memuatkan operasi ke sistem apabila boleh Pergi ke kernel. Apabila operasi JavaScript menyekat urutan, gelung acara juga disekat.

Kolam kerja ialah model pelaksanaan yang menghasilkan dan memproses urutan yang berasingan, kemudian melaksanakan tugas secara serentak dan mengembalikan keputusan kepada gelung acara. Gelung acara kemudian menggunakan hasil tersebut untuk melaksanakan panggilan balik yang disediakan.

Pada asasnya, kumpulan pekerja mengendalikan operasi I/O tak segerak - terutamanya interaksi dengan cakera sistem dan rangkaian. Sesetengah modul menggunakan kumpulan pekerja di luar kotak, seperti fs (I/O-heavy) atau crypto (CPU-heavy). Kumpulan pekerja dilaksanakan dalam libuv, yang menyebabkan kelewatan yang sedikit tetapi hampir boleh diabaikan apabila Node perlu memindahkan data secara dalaman antara JavaScript dan C.

Setelah memahami maksud gelung acara dan kumpulan kerja, mari lihat kod berikut:

Analisis ringkas Node.js menggunakan worker_threads multi-threads untuk pemprosesan selari

Dalam kod di atas, kita tidak perlu menunggu untuk acara secara serentak. Kami menyerahkan tugas membaca fail kepada kumpulan pekerja dan memanggil fungsi yang disediakan dengan hasilnya. Memandangkan kumpulan pekerja mempunyai urutannya sendiri, gelung acara boleh terus melaksanakan seperti biasa semasa membaca fail.


Izinkan saya memperkenalkan kepada anda: worker_threads

Dengan keluaran Node.js 10.5.0, worker_threads muncul. Ia menyokong mencipta aplikasi berbilang benang mudah dalam JavaScript

worker_threads ialah pakej modul nodejs. Pekerja benang ialah sekeping kod (biasanya diambil daripada fail) yang dijana dalam benang berasingan.

Adalah penting untuk ambil perhatian bahawa istilah pekerja benang, pekerja dan benang sering digunakan secara bergantian. Mereka semua merujuk kepada perkara yang sama.

Analisis ringkas Node.js menggunakan worker_threads multi-threads untuk pemprosesan selari

Benang pekerja dalam Node.js berguna untuk melaksanakan tugas JavaScript yang berat. Dengan bantuan benang, Pekerja boleh menjalankan kod JavaScript selari dengan mudah, menjadikannya lebih pantas dan lebih cekap. Kami boleh menyelesaikan tugas berat tanpa mengganggu utas utama.

Urut pekerja tidak diperkenalkan dalam versi lama Node.js. Jadi, mula-mula kemas kini Node.js anda untuk bermula.

Sekarang buat dua fail untuk melaksanakan urutan seperti berikut:

Nama fail: worker.js

const { workerData, parentPort } = require('worker_threads');

console.log(`Write-up on how ${workerData} wants to chill with the big boys`);

parentPort.postMessage({ filename: workerData, status: 'Done' });

Nama fail: indeks .js

const { Worker } = require('worker_threads');

const runSerice = (workerData) => {
  return new Promise((resolve, reject) => {
    const worker = new Worker('./worker.js', { workerData });
    worker.on('message', resolve);
    worker.on('error', reject);
    worker.on('exit', (code) => {
      if (code !== 0)
        reject(new Error(`Worker Thread stopped with exit code ${code}`));
    });
  });
};
const run = async () => {
  const result = await runSerice('Tunde Ednut');
  console.log(result);
};

run().catch((err) => console.error(err));

Output:

Analisis ringkas Node.js menggunakan worker_threads multi-threads untuk pemprosesan selari

Untuk lebih banyak pengetahuan berkaitan nod, sila lawati: tutorial nodejs!

Atas ialah kandungan terperinci Analisis ringkas Node.js menggunakan worker_threads multi-threads untuk pemprosesan selari. 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