Jika saya mengerti dengan benar, Node JS bukan pemblokiran ... jadi alih-alih menunggu respons dari basis data atau proses lain, ini beralih ke sesuatu yang lain dan memeriksa kembali nanti.
Juga satu utas.
Jadi apakah semua ini berarti bahwa proses Node JS yang diberikan dapat sepenuhnya dan efisien memanfaatkan inti CPU tunggal tetapi tidak akan menggunakan inti lain pada mesin, karena, ia tidak akan pernah menggunakan lebih dari satu pada satu waktu.
Ini tentu saja berarti bahwa CPU lain masih dapat digunakan oleh proses lain untuk hal-hal seperti database SQL atau subrutin berat CPU yang dipisahkan secara sengaja selama keduanya merupakan proses yang terpisah.
Juga dalam hal proses Node JS memiliki loop tanpa akhir atau fungsi yang berjalan lama, proses itu tidak lagi berguna dengan cara apa pun sampai loop tanpa akhir atau fungsi yang berjalan lama dihentikan (atau seluruh proses mati).
Apakah ini benar? Apakah saya benar dalam pengertian saya?
sumber
Jawaban:
Cukup benar, ya. Server node.js memiliki kumpulan utas internal sehingga dapat melakukan operasi pemblokiran dan memberi tahu utas utama dengan panggilan balik atau peristiwa saat semuanya selesai.
Jadi saya membayangkan bahwa itu akan membuat penggunaan inti lain terbatas untuk kumpulan thread, misalnya jika Anda melakukan sistem file non-blocking baca ini kemungkinan dilaksanakan dengan memberi tahu thread dari kumpulan thread untuk melakukan pembacaan dan mengatur panggilan balik ketika itu dilakukan yang berarti bahwa pembacaan dapat terjadi pada utas / inti yang berbeda sementara program node.js utama melakukan sesuatu yang lain.
Tetapi dari sudut pandang node.js, itu sepenuhnya threaded tunggal dan tidak akan langsung menggunakan lebih dari satu inti.
sumber
Ya, saya akan mengatakan bahwa pemahaman Anda sepenuhnya benar. Artikel ini ( diarsipkan ) menjelaskan alasan di balik desain ini dengan cukup baik. Ini mungkin paragraf paling penting:
sumber
Bahkan jika ini adalah utas lama, saya pikir, bahwa saya akan berbagi dengan sebuah ide, bagaimana memanfaatkan lebih dari satu inti dalam aplikasi Node.JS. Seperti yang disebutkan Nuray Altin - JXcore dapat melakukannya.
Contoh sederhana:
Secara default ada dua utas (Anda dapat mengubahnya dengan
jxcore.tasks.setThreadCount()
)Tentu saja ada banyak lagi yang dapat Anda lakukan dengan tugas. Dokumen ada di sini .
Beberapa artikel tentang hal itu:
sumber
Sejak pertanyaan ini ditanyakan hampir 2 tahun yang lalu. Banyak hal menjadi berbeda atau ada pendekatan alternatif untuk masalah multithreading di Node.JS
Menurut posting blog di bawah ini, menggunakan ekstensi 'tugas' yang masuk, beberapa dapat mengambil manfaat dari core lain yang tersedia secara langsung.
http://oguzbastemur.blogspot.com/2013/12/multithread-nodejs.html
sumber
Node.js adalah aplikasi single-threaded, tetapi dapat mendukung konkurensi melalui konsep acara dan panggilan balik. Berikut adalah video oleh Philip Roberts yang menjelaskan bagaimana loop acara bekerja di javascript.
Klik di sini untuk melihat videonya
(Alih-alih WebAPI ada C ++ API di Node.js)
sumber