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

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

Mar 17, 2022 pm 07:58 PM
node.js multithreading pemprosesan selari

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' });
Salin selepas log masuk

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));
Salin selepas log masuk

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Pengecualian fungsi C++ dan multithreading: pengendalian ralat dalam persekitaran serentak Pengecualian fungsi C++ dan multithreading: pengendalian ralat dalam persekitaran serentak May 04, 2024 pm 04:42 PM

Pengendalian pengecualian fungsi dalam C++ amat penting untuk persekitaran berbilang benang untuk memastikan keselamatan benang dan integriti data. Pernyataan cuba-tangkap membolehkan anda menangkap dan mengendalikan jenis pengecualian tertentu apabila ia berlaku untuk mengelakkan ranap program atau rasuah data.

Bagaimana untuk melaksanakan multi-threading dalam PHP? Bagaimana untuk melaksanakan multi-threading dalam PHP? May 06, 2024 pm 09:54 PM

PHP multithreading merujuk kepada menjalankan berbilang tugas secara serentak dalam satu proses, yang dicapai dengan mencipta benang berjalan secara bebas. Anda boleh menggunakan sambungan Pthreads dalam PHP untuk mensimulasikan tingkah laku berbilang benang Selepas pemasangan, anda boleh menggunakan kelas Thread untuk mencipta dan memulakan utas. Contohnya, apabila memproses sejumlah besar data, data boleh dibahagikan kepada berbilang blok dan bilangan benang yang sepadan boleh dibuat untuk memprosesnya secara serentak untuk meningkatkan kecekapan.

Penggunaan rangka kerja ujian unit JUnit dalam persekitaran berbilang benang Penggunaan rangka kerja ujian unit JUnit dalam persekitaran berbilang benang Apr 18, 2024 pm 03:12 PM

Terdapat dua pendekatan biasa apabila menggunakan JUnit dalam persekitaran berbilang benang: ujian berbenang tunggal dan ujian berbilang benang. Ujian berutas tunggal dijalankan pada utas utama untuk mengelakkan isu konkurensi, manakala ujian berbilang utas dijalankan pada utas pekerja dan memerlukan pendekatan ujian disegerakkan untuk memastikan sumber yang dikongsi tidak terganggu. Kes penggunaan biasa termasuk menguji kaedah selamat berbilang benang, seperti menggunakan ConcurrentHashMap untuk menyimpan pasangan nilai kunci, dan utas serentak untuk beroperasi pada pasangan nilai kunci dan mengesahkan ketepatannya, mencerminkan aplikasi JUnit dalam persekitaran berbilang benang. .

Bagaimanakah concurrency dan multithreading fungsi Java boleh meningkatkan prestasi? Bagaimanakah concurrency dan multithreading fungsi Java boleh meningkatkan prestasi? Apr 26, 2024 pm 04:15 PM

Teknik concurrency dan multithreading menggunakan fungsi Java boleh meningkatkan prestasi aplikasi, termasuk langkah berikut: Memahami konsep concurrency dan multithreading. Manfaatkan pustaka konkurensi dan berbilang benang Java seperti ExecutorService dan Callable. Amalkan kes seperti pendaraban matriks berbilang benang untuk memendekkan masa pelaksanaan. Nikmati kelebihan peningkatan kelajuan tindak balas aplikasi dan kecekapan pemprosesan yang dioptimumkan yang dibawa oleh concurrency dan multi-threading.

Bagaimanakah fungsi PHP berkelakuan dalam persekitaran berbilang benang? Bagaimanakah fungsi PHP berkelakuan dalam persekitaran berbilang benang? Apr 16, 2024 am 10:48 AM

Dalam persekitaran berbilang benang, gelagat fungsi PHP bergantung pada jenisnya: Fungsi biasa: thread-safe, boleh dilaksanakan secara serentak. Fungsi yang mengubah suai pembolehubah global: tidak selamat, perlu menggunakan mekanisme penyegerakan. Fungsi operasi fail: tidak selamat, perlu menggunakan mekanisme penyegerakan untuk menyelaraskan akses. Fungsi operasi pangkalan data: Mekanisme sistem pangkalan data yang tidak selamat perlu digunakan untuk mengelakkan konflik.

Bagaimana untuk menangani sumber yang dikongsi dalam multi-threading dalam C++? Bagaimana untuk menangani sumber yang dikongsi dalam multi-threading dalam C++? Jun 03, 2024 am 10:28 AM

Mutex digunakan dalam C++ untuk mengendalikan sumber perkongsian berbilang benang: buat mutex melalui std::mutex. Gunakan mtx.lock() untuk mendapatkan mutex dan menyediakan akses eksklusif kepada sumber yang dikongsi. Gunakan mtx.unlock() untuk melepaskan mutex.

Cabaran dan tindakan balas pengurusan memori C++ dalam persekitaran berbilang benang? Cabaran dan tindakan balas pengurusan memori C++ dalam persekitaran berbilang benang? Jun 05, 2024 pm 01:08 PM

Dalam persekitaran berbilang benang, pengurusan memori C++ menghadapi cabaran berikut: perlumbaan data, kebuntuan dan kebocoran memori. Tindakan balas termasuk: 1. Menggunakan mekanisme penyegerakan, seperti mutex dan pembolehubah atom 2. Menggunakan struktur data tanpa kunci 3. Menggunakan penunjuk pintar 4. (Pilihan) Melaksanakan pengumpulan sampah;

Cabaran dan strategi untuk menguji program berbilang benang dalam C++ Cabaran dan strategi untuk menguji program berbilang benang dalam C++ May 31, 2024 pm 06:34 PM

Pengujian program berbilang benang menghadapi cabaran seperti ketidakbolehulangan, ralat konkurensi, kebuntuan dan kekurangan keterlihatan. Strategi termasuk: Ujian unit: Tulis ujian unit untuk setiap utas untuk mengesahkan kelakuan utas. Simulasi berbilang benang: Gunakan rangka kerja simulasi untuk menguji program anda dengan kawalan ke atas penjadualan benang. Pengesanan perlumbaan data: Gunakan alat untuk mencari perlumbaan data yang berpotensi, seperti valgrind. Nyahpepijat: Gunakan penyahpepijat (seperti gdb) untuk memeriksa status program masa jalan dan mencari sumber perlumbaan data.

See all articles