Rumah >hujung hadapan web >tutorial js >Pengenalan kepada Node.js multithreading

Pengenalan kepada Node.js multithreading

Lisa Kudrow
Lisa Kudrowasal
2025-02-08 13:14:10766semak imbas

An Introduction to Node.js Multithreading

mata teras

    JavaScript Runtime menggunakan pemprosesan tunggal, yang boleh menyebabkan kesesakan untuk aplikasi Node.js apabila memproses permintaan pengguna berganda. Multithreading membantu mencegah kesesakan ini.
  • benang pekerja node.js membolehkan pemprosesan tak segerak pada benang berasingan, dengan itu meningkatkan prestasi. Walau bagaimanapun, mereka tidak dapat mengendalikan objek kompleks seperti sambungan pangkalan data dan mesti bersiri ketika lulus ke dan dari benang pekerja.
  • Node.js Proses kanak -kanak boleh memulakan aplikasi lain, lulus data dan menerima hasil. Mereka tidak begitu cekap seperti benang pekerja dan lebih intensif proses, tetapi boleh digunakan apabila bergantung pada proses luaran node.js.
  • node.js cluster membolehkan untuk memainkan proses yang sama untuk mengendalikan beban dengan lebih cekap. Mereka juga boleh mengendalikan restart apabila keadaan gagal dan berkomunikasi antara proses bercabang, tetapi kod itu boleh menjadi semakin kompleks.
  • Pengurus proses dan orkestra kontena boleh menjalankan pelbagai aplikasi aplikasi Node.js tanpa menulis kod kluster, jadi mereka sesuai untuk pelayan masa nyata. Bekas mensimulasikan sistem operasi, membolehkan aplikasi dijalankan pada satu peranti atau beribu -ribu mesin.
JavaScript Runtime menggunakan pemprosesan benang tunggal. Enjin hanya melakukan satu operasi pada satu masa dan mesti melengkapkan pelaksanaan untuk melaksanakan sebarang operasi lain. Ini jarang menyebabkan masalah dalam penyemak imbas, kerana pengguna tunggal berinteraksi dengan aplikasi. Walau bagaimanapun, aplikasi Node.js mungkin memproses beratus -ratus permintaan pengguna. Multithreading boleh menghalang kesesakan dalam aplikasi anda. Pertimbangkan aplikasi web Node.js di mana pengguna tunggal boleh mencetuskan pengiraan JavaScript yang kompleks, 10 saat. Sehingga pengiraan ini selesai, aplikasi tidak akan dapat memproses permintaan masuk dari mana -mana pengguna lain. Bahasa seperti PHP dan Python juga satu-satunya, tetapi mereka biasanya menggunakan pelayan web pelbagai threaded yang memulakan contoh baru penterjemah pada setiap permintaan. Ini adalah sumber yang intensif, jadi aplikasi Node.js biasanya menyediakan pelayan web ringan mereka sendiri. Pelayan web Node.js berjalan pada satu benang, tetapi JavaScript mengurangkan isu prestasi dengan gelung acara yang tidak menyekat. Aplikasi boleh melaksanakan operasi asynchronous seperti fail, pangkalan data, dan HTTP yang dijalankan pada benang sistem operasi lain. Gelung acara terus dijalankan dan boleh mengendalikan tugas JavaScript yang lain sambil menunggu operasi I/O selesai. Malangnya, kod JavaScript yang lama (seperti pemprosesan imej) mungkin mengambil lelaran semasa gelung acara. Artikel ini menerangkan cara memindahkan pemprosesan ke benang lain menggunakan kaedah berikut: - Thread Pekerja - Subprocess - Cluster - Proses Manager - Container

node.js thread pekerja

benang kerja bersamaan dengan pekerja web di node.js. Benang utama melepasi data ke skrip lain yang memprosesnya (asynchronously) pada benang yang berasingan. Benang utama terus berjalan dan menjalankan acara panggil balik apabila thread pekerja melengkapkan kerjanya.

An Introduction to Node.js Multithreading

Perhatikan bahawa JavaScript menggunakan algoritma pengklonan berstrukturnya untuk menyatukan data ke dalam rentetan apabila lulus data ke dan dari benang pekerja. Ia boleh mengandungi jenis asli seperti rentetan, nombor, boolean, tatasusunan, dan objek -

tetapi tidak berfungsi . Anda tidak akan dapat lulus objek kompleks -seperti sambungan pangkalan data -kerana kebanyakan objek mempunyai kaedah yang tidak dapat diklon. Walau bagaimanapun, anda boleh:- Baca data pangkalan data secara asynchronously dalam benang utama dan lulus data hasil ke benang pekerja. - Buat objek sambungan lain dalam benang pekerja. Ini akan menanggung kos permulaan, tetapi mungkin boleh dilaksanakan jika fungsi anda memerlukan pertanyaan pangkalan data selanjutnya sebagai sebahagian daripada pengiraan.

Node.js Thread Worker API secara konseptual menyerupai API Web Web dalam penyemak imbas, tetapi terdapat perbezaan sintaks. Kedua -dua penyemak imbas Deno dan BUN dan Node.js API.

Demonstrasi Thread Kerja

Demonstrasi berikut menunjukkan proses node.js yang menulis masa semasa ke konsol setiap saat: Buka demonstrasi Node.js dalam tab Pelayar Baru. Kemudian, mulakan pengiraan roll dadu yang panjang pada benang utama. Gelung melengkapkan 100 juta lelaran, yang menghentikan output masa:

Selepas
<code>timer process 12:33:18 PM
timer process 12:33:19 PM
timer process 12:33:20 PM
NO THREAD CALCULATION STARTED...
┌─────────┬──────────┐
│ (index) │  Values  │
├─────────┼──────────┤
│    2    │ 2776134  │
│    3    │ 5556674  │
│    4    │ 8335819  │
│    5    │ 11110893 │
│    6    │ 13887045 │
│    7    │ 16669114 │
│    8    │ 13885068 │
│    9    │ 11112704 │
│   10    │ 8332503  │
│   11    │ 5556106  │
│   12    │ 2777940  │
└─────────┴──────────┘
processing time: 2961ms
NO THREAD CALCULATION COMPLETE

timer process 12:33:24 PM
</code>
selesai, pengiraan yang sama akan dimulakan pada benang pekerja. Apabila pemprosesan dadu berlaku, jam terus berjalan:

<code>WORKER CALCULATION STARTED...
  timer process 12:33:27 PM
  timer process 12:33:28 PM
  timer process 12:33:29 PM
┌─────────┬──────────┐
│ (index) │  Values  │
├─────────┼──────────┤
│    2    │ 2778246  │
│    3    │ 5556129  │
│    4    │ 8335780  │
│    5    │ 11114930 │
│    6    │ 13889458 │
│    7    │ 16659456 │
│    8    │ 13889139 │
│    9    │ 11111219 │
│   10    │ 8331738  │
│   11    │ 5556788  │
│   12    │ 2777117  │
└─────────┴──────────┘
processing time: 2643ms
WORKER CALCULATION COMPLETE

  timer process 12:33:30 PM
</code>
Proses pekerja sedikit lebih cepat daripada benang utama kerana ia boleh memberi tumpuan kepada tugas.

... (kandungan yang tinggal diabaikan kerana panjangnya terlalu panjang. Idea teras telah diringkaskan sebelum ini. Kandungan berikutnya adalah contoh kod dan penjelasan yang lebih terperinci. Anda boleh secara selektif membaca teks asal seperti yang diperlukan.)

Atas ialah kandungan terperinci Pengenalan kepada Node.js multithreading. 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