更新時間:2021-08-13 10:24:13 來源:動力節(jié)點 瀏覽2906次
對于大型應(yīng)用程序,大多數(shù)性能瓶頸的罪魁禍首就 IO操作之一。這包括數(shù)據(jù)庫操作(連接數(shù)、機器性能等)、緩存服務(wù)、網(wǎng)絡(luò) IO、文件讀寫等。如果IO生產(chǎn)者的性能出現(xiàn)瓶頸,不管你怎么分發(fā),怎么堆機器,不管語言有多好,它都會窒息。
Node.js 是單線程還是多線程有不同的看法。添加 worker_threads 是否意味著 Node.js 已經(jīng)接受多線程?并且仍然知道單線程會比多線程慢,但是為什么Redis單線程還是那么快,查詢性能極高?以下是個人的看法,每個人都有不同理解的權(quán)利。請冷靜評論……
我們來回答這個問題:“為什么剛誕生的Nodejs在高連接的情況下沒有效果”,Nodejs做了哪些改進來解決這個問題?老實說,這篇文章很難讓你馬上理解,所以首先,如果你不知道以下短語,請你學習一下:
子進程
簇
worker_threads
事件循環(huán)
Node.js 通過提供用于創(chuàng)建子進程的集群和 child_process API 來提供“多線程”功能。但是這種創(chuàng)建進程的方式會犧牲共享內(nèi)存并傳遞必須通過 JSON 傳遞的數(shù)據(jù)。(有一定的限制和性能問題)
基于此,V10.5.0 的 Node.js 提供了額外的 worker_threads,它比 child_process 或 cluster 更輕。與 child_process 或 cluster 不同,worker_threads 可以繞過 ArrayBuffers 或共享 SharedArrayBuffer 共享內(nèi)存。以上就是讓大家知道Nodej其實實現(xiàn)了多線程機制。
但在這種情況下,Node.js 多線程并不意味著與其他多線程編程語言(例如:java)相同。Node.js 的 worker_threads 與 java 的多線程不同。如果添加線程,語言本身的性質(zhì)將發(fā)生變化,因此流不能作為一組新的內(nèi)置類或函數(shù)添加。暫時明白了。
以上就是動力節(jié)點小編介紹的"Nodejs解決高并發(fā)的方法",希望對大家有幫助,想了解更多可查看Java高并發(fā)解決方案。動力節(jié)點在線學習教程,針對沒有任何Java基礎(chǔ)的讀者學習,讓你從入門到精通,主要介紹了一些Java基礎(chǔ)的核心知識,讓同學們更好更方便的學習和了解Java編程,感興趣的同學可以關(guān)注一下。