Apakah perbezaan antara seni bina yang dipacu oleh acara dan pengaturcaraan pelbagai nod dalam bahasa lain?


Jawapan 1:

Kedua-duanya dalam paradigma multi-threaded yang didorong oleh peristiwa dan kod ini berjalan di dalam proses sistem operasi.

Apabila proses berjalan dengan pelbagai thread, benang ini berkongsi memori proses (ruang alamat) untuk membaca dan menulis.

JavaScript yang menguasai Node.js adalah bersifat tunggal dengan reka bentuk. Setiap fungsi dijamin dapat diselesaikan, dan tiada kod JavaScript lain dalam proses semasa akan berjalan semasa fungsi tersebut dijalankan. Acara tidak segerak secara semula jadi (rangkaian, output input cakera, pemasa, perkakasan dan acara sistem operasi lain) dikendalikan oleh enjin yang menambah fungsi JavaScript yang didaftarkan sebagai pengendali (atau panggilan balik) untuk acara-acara ini untuk giliran gelung acara yang akan dilaksanakan selepas fungsi di hadapan barisan telah selesai.

Dalam paradigma multi-threaded, dua atau lebih benang menjalankan kod selari, jadi semasa fungsi menjalankan sekeping kod yang berlainan boleh berjalan juga pada teras pemproses yang berbeza, mungkin membaca atau menulis ke alamat memori yang sama. Ini mungkin menyebabkan keadaan memori yang tidak konsisten kecuali mekanisme sistem operasi khas (primitif penyegerakan) digunakan oleh kod untuk menguruskan capaian ke memori yang dikongsi.



Jawapan 2:

Ini adalah persoalan yang baik, "Apakah perbezaan antara seni bina yang diupayakan oleh Node.js dan pengaturcaraan berbilang bahasa dalam bahasa lain?".

Kita boleh dan harus memecahkan ini sedikit.

  • Senibina yang didorong oleh acara node.

Senibina yang didorong peristiwa tidak eksklusif untuk Node, mis., Tornado (Python), Vertx (Java), Akka (Scala), ReactiveX (berbilang bahasa).

  • Pengaturcaraan berbilang bahasa dalam bahasa lain.

Ambil perhatian bahawa JavaScript, dengan reka bentuk, tidak menyokong pelbagai thread. Walaupun ia menyokong webworkers, yang, sejauh yang saya tahu, boleh berfungsi sebagai benang.

Oleh itu, didorong oleh peristiwa tidak unik untuk Node dan multi-threading boleh dilakukan di Node.

Oleh itu, terdapat dua soalan di sini: "Apakah perbezaan di antara pemacu acara vs multi-threading", dan "Apakah perbezaan antara Node dan bahasa-bahasa lain (rangka kerja)". Saya akan memberi tumpuan kepada yang terakhir kerana nampaknya niatnya soalan itu.

Saya akan katakan apa yang membuat Node istimewa adalah bahawa penulis telah menciptanya untuk mengelakkan daripada menyekat IO ketika membina aplikasi web. Budaya masyarakat Node adalah untuk menekankan dan membina kekuatan IO yang tidak menyekat. Anda tidak akan mencari terlalu banyak perpustakaan pihak ke-3 yang melakukan panggilan menyekat. Sebagai pemaju yang menggunakan Node, anda tidak mungkin menjalankan operasi menghalang halus dalam kod anda. Sedangkan dalam bahasa lain, pemaju naif mungkin secara tidak sengaja melakukan panggilan menyekat yang sangat tidak cekap seperti membaca dari sambungan pangkalan data.

Selain itu, anda perlu membaca banyak model untuk "keseragaman" dan memahami kebaikan dan keburukan masing-masing. Mata Bonus untuk menghargai mengapa multi-threading boleh diterima untuk masa yang lama.



Jawapan 3:

Perbezaan konsep adalah sangat mudah untuk membungkus kepala anda.

Dalam senibina yang didorong oleh acara, program anda berjalan dalam gelung berulir tunggal yang berterusan (anda boleh melakukan beberapa threading dalam nod tetapi jangan bimbang tentang itu sekarang). Apabila kebakaran berlaku, pekerjaan di atas tumpukan panggilan akan ditangani pada waktu program.

Senibina berbilang thread secara amnya menghantar thread baru apabila ia mesti menunggu tindakan. Oleh itu, anda membuat panggilan ke pangkalan data dan anda berputar benang baru yang akan menjalankan semua perkara yang anda perlukan dan melakukan apa yang anda perlukan dan menyimpulkan atau menyambung semula benang asal.

Kedua-dua kaedah ini sangat berguna untuk pelbagai perkara. Acara yang dipandu adalah sangat baik untuk antara muka pengguna dan pelayan kerana program anda tidak tahu kapan yang baru akan berlaku dan seringkali acara akan datang dalam pecah. Walaupun threading diperlukan untuk pekerjaan berat perhitungan di mana anda ingin memecah masalah menjadi kepingan yang lebih kecil (atau anda menghampiri batas gelung berulir tunggal anda).