Rumah  >  Artikel  >  hujung hadapan web  >  Menguasai Prestasi Node.js: Buka Kunci Kuasa Benang Pekerja dan Pengelompokan — Hoai Nho

Menguasai Prestasi Node.js: Buka Kunci Kuasa Benang Pekerja dan Pengelompokan — Hoai Nho

Barbara Streisand
Barbara Streisandasal
2024-10-21 16:40:02873semak imbas

Node.js dikenali sebagai benang tunggal, memanfaatkan gelung peristiwa untuk mengendalikan operasi tak segerak dengan cekap. Walau bagaimanapun, pengendalian tugas intensif CPU atau menggunakan berbilang teras CPU memerlukan pendekatan yang lebih maju: Benang Pekerja dan Pengkelompokan. Artikel ini mendalami teknik ini, memberikan penjelasan yang jelas dan contoh kod praktikal yang boleh anda gunakan secara langsung.

Mastering Node.js Performance: Unlock the Power of Worker Threads and Clustering — Hoai Nho

1. Gambaran Keseluruhan: Mengapa Menggunakan Benang Pekerja dan Pengelompokan?

  • Benang Pekerja: Jalankan kod intensif CPU secara selari tanpa menyekat gelung acara.
  • Pengelompokkan: Skalakan aplikasi dengan melahirkan berbilang kejadian (proses) untuk menggunakan berbilang teras CPU.

Mastering Node.js Performance: Unlock the Power of Worker Threads and Clustering — Hoai Nho

Kedua-dua teknik menangani skala dan prestasi, tetapi ia berbeza:

  • Benang Pekerja: Terbaik untuk pengiraan berat dalam satu proses.
  • Kluster: Terbaik untuk mengendalikan trafik yang tinggi dengan menghasilkan berbilang proses untuk mengagihkan beban.

2. Gelung Acara dan Keperluan untuk Berbilang Benang

gelung peristiwa dalam Node.js adalah satu benang. Walaupun ia berfungsi hebat untuk tugas terikat I/O, ia bergelut dengan operasi berat CPU seperti pemprosesan imej, penyulitan atau pengiraan yang rumit. Tanpa berbilang benang, operasi ini menyekat gelung acara, menjejaskan prestasi.

Mastering Node.js Performance: Unlock the Power of Worker Threads and Clustering — Hoai Nho

3. Benang Pekerja dalam Node.js

Mastering Node.js Performance: Unlock the Power of Worker Threads and Clustering — Hoai Nho

Benang Pekerja membenarkan kami melaksanakan kod JavaScript pada berbilang urutan, menghalang urutan utama daripada disekat.

Contoh: Pemampatan Imej menggunakan Benang Pekerja

Contoh ini menunjukkan cara menggunakan Benang Pekerja untuk memampatkan imej tanpa menyekat gelung acara utama.

Langkah 1: Pasang sharp untuk pemprosesan imej.

npm install sharp

Langkah 2: Cipta image-worker.js (kod pekerja).

npm install sharp

Langkah 3: Urutan utama menggunakan Worker daripada worker_threads.

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

// Compress the image
sharp(workerData.inputPath)
  .resize(800, 600)
  .toFile(workerData.outputPath)
  .then(() => parentPort.postMessage('Compression complete'))
  .catch(err => parentPort.postMessage(`Error: ${err.message}`));

Cara Ia Berfungsi

  • benang utama memuatkan tugas pemampatan imej ke Benang Pekerja.
  • Gelung acara kekal percuma untuk mengendalikan tugas lain.
  • Apabila pekerja selesai, ia menghantar mesej kembali ke urutan utama.

4. Pengelompokan dalam Node.js

Pengkelompokan melibatkan melahirkan berbilang kejadian proses Node.js, menggunakan semua teras CPU yang tersedia. Ini amat berguna dalam pelayan web trafik tinggi.

Mastering Node.js Performance: Unlock the Power of Worker Threads and Clustering — Hoai Nho

Contoh: Pelayan HTTP Mudah Menggunakan Kluster

Contoh ini menunjukkan cara menggunakan modul kluster untuk mencipta pelayan HTTP berskala.

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

function compressImage(inputPath, outputPath) {
  return new Promise((resolve, reject) => {
    const worker = new Worker(path.resolve(__dirname, 'image-worker.js'), {
      workerData: { inputPath, outputPath }
    });

    worker.on('message', message => resolve(message));
    worker.on('error', reject);
    worker.on('exit', code => {
      if (code !== 0) reject(new Error(`Worker stopped with exit code ${code}`));
    });
  });
}

// Example usage
compressImage('input.jpg', 'output.jpg')
  .then(console.log)
  .catch(console.error);

Cara Ia Berfungsi

  • Proses utama memotong proses kanak-kanak (pekerja) berdasarkan bilangan teras CPU.
  • Pekerja berkongsi port yang sama (dalam kes ini, 3000) untuk mengendalikan permintaan masuk.
  • Jika pekerja ranap, modul kelompok memulakan semula secara automatik, memastikan kebolehpercayaan.

5. Komunikasi Antara Benang atau Kluster Pekerja

Komunikasi Pekerja (Pub/Sub Corak)

Pekerja dan utas utama berkomunikasi melalui penghantaran mesej—serupa dengan model Pub/Sub. Dalam contoh pemampatan imej di atas, utas pekerja menghantar kemas kini status ke utas utama menggunakan parentPort.postMessage().

Mastering Node.js Performance: Unlock the Power of Worker Threads and Clustering — Hoai Nho

Anda boleh menggunakan Redis Pub/Sub atau Baris Gilir Mesej (seperti RabbitMQ) untuk komunikasi yang lebih maju antara kelompok atau urutan.

6. Bila hendak menggunakan Benang Pekerja vs Pengelompokan?

Aspect Worker Threads Clustering
Use case CPU-intensive tasks High-traffic applications
Execution Runs within a single process Spawns multiple processes
Performance Avoids blocking the event loop Utilizes multiple CPU cores
Communication Message passing between threads Message passing between processes
Fault Tolerance Limited to process-level recovery Can restart individual processes

Mastering Node.js Performance: Unlock the Power of Worker Threads and Clustering — Hoai Nho

Contoh Penggunaan

  • Benang Pekerja: Pemampatan imej, penyulitan data, inferens model pembelajaran mesin.
  • Pengelompokkan: Pelayan HTTP seimbang beban, API yang mengendalikan beribu-ribu permintaan sesaat.

7. Amalan Terbaik untuk Menggunakan Pekerja dan Kelompok

Mastering Node.js Performance: Unlock the Power of Worker Threads and Clustering — Hoai Nho

  • Penutupan yang anggun: Pastikan pekerja atau kelompok keluar dengan anggun untuk mengelakkan kehilangan data.
  • Pemeriksaan kesihatan: Pantau proses pekerja dan mulakan semula secara automatik jika ia ranap.
  • Pengurusan sumber: Hadkan memori dan penggunaan CPU untuk menghalang pekerja daripada mengatasi sistem.
  • Strategi komunikasi: Gunakan Redis atau NATS untuk menghantar mesej lanjutan antara kelompok.

8. Kesimpulan

Kedua-dua Benang Pekerja dan Pengelompokkan ialah alatan berkuasa untuk meningkatkan prestasi dan kebolehskalaan dalam aplikasi Node.js. Benang Pekerja paling sesuai untuk tugas terikat CPU tanpa menyekat gelung acara, manakala Pengelompokan membolehkan anda menskalakan pelayan web secara mendatar merentas berbilang teras CPU.

Dengan memahami perbezaan dan memilih pendekatan yang betul untuk kes penggunaan anda, anda boleh meningkatkan dengan ketara kemampuan dan daya tahan aplikasi anda.

Atas ialah kandungan terperinci Menguasai Prestasi Node.js: Buka Kunci Kuasa Benang Pekerja dan Pengelompokan — Hoai Nho. 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