您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)Nodejs能夠應(yīng)用于什么場(chǎng)景的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
優(yōu)點(diǎn):支持多線程并發(fā)
缺點(diǎn):阻塞
線程是可以獨(dú)立運(yùn)行的最小的 CPU 單位,可以在同一個(gè)進(jìn)程里并發(fā)運(yùn)行,共享該進(jìn)程下的內(nèi)存地址空間。
當(dāng)不同的線程需要占用同一個(gè)變量時(shí),根據(jù)先到先得的原則,先到的線程在運(yùn)作時(shí),后來的線程只能在旁邊等待,也就是加入到了阻塞排隊(duì)序列。就造成了線程阻塞。
類似場(chǎng)景:銀行柜臺(tái)辦理業(yè)務(wù)
優(yōu)點(diǎn):高并發(fā)(最重要的優(yōu)點(diǎn))、適合 I/O 密集型應(yīng)用
缺點(diǎn):
不適合CPU密集型應(yīng)用(CPU密集型應(yīng)用給Node帶來的挑戰(zhàn)主要是:由于JavaScript單線程的原因,如果有長(zhǎng)時(shí)間運(yùn)行的計(jì)算(比如大循環(huán)),將會(huì)導(dǎo)致 CPU 時(shí)間片不能釋放,使得后續(xù) I/O 無法發(fā)起)
只支持單核CPU,不能充分利用CPU
可靠性低,一旦代碼某個(gè)環(huán)節(jié)崩潰,整個(gè)系統(tǒng)都崩潰
原因:?jiǎn)芜M(jìn)程、單線程
解決方案:
(1)Nnigx 反向代理,負(fù)載均衡,開多個(gè)進(jìn)程,綁定多個(gè)端口;
(2)開多個(gè)進(jìn)程監(jiān)聽同一個(gè)端口,使用cluster模塊
(3)線上使用 PM2 管理進(jìn)程,出現(xiàn)問題自動(dòng)重啟項(xiàng)目
Debug 不方便,錯(cuò)誤沒有 stack trace
NodeJS 基于事件循環(huán),每一條 NodeJS 的邏輯寫在回調(diào)函數(shù)里面,回調(diào)函數(shù)在返回之后異步執(zhí)行?!就扑]學(xué)習(xí):《nodejs 教程》】
NodeJS 不是沒有阻塞,而是阻塞不發(fā)生在后續(xù)回調(diào)的流程,而會(huì)發(fā)生在 NodeJS 本身對(duì)邏輯的計(jì)算和處理。
NodeJS 它的所有 I/O、網(wǎng)絡(luò)通信等比較耗時(shí)的操作,都可以交給 worker threads 執(zhí)行再回調(diào),所以很快。但 CPU 的正常操作,它只能自己操作。
類似場(chǎng)景:排隊(duì)點(diǎn)餐后叫號(hào)取餐。
NodeJS 處理并發(fā)的能力強(qiáng),但處理計(jì)算和邏輯的能力反而很弱。
因此,我們把復(fù)雜的邏輯運(yùn)算搬到前端(客戶端)完成,而 NodeJS 只需要提供異步 I/O,這樣就可以實(shí)現(xiàn)對(duì)高并發(fā)的高性能處理。
這是 NodeJS 最理想的應(yīng)用場(chǎng)景,可以處理數(shù)萬條連接,本身沒有太多的邏輯,只需要請(qǐng)求 API,組織數(shù)據(jù)進(jìn)行返回即可。
它本質(zhì)上只是從某個(gè)數(shù)據(jù)庫(kù)中查找一些值并將它們組成一個(gè)響應(yīng)。
由于響應(yīng)是少量文本,入站請(qǐng)求也是少量的文本,因此流量不高,一臺(tái)機(jī)器甚至也可以處理最繁忙的公司的 API 需求。
實(shí)時(shí)聊天、客戶端邏輯強(qiáng)大的單頁(yè) APP,具體的例子比如說:本地化的在線音樂應(yīng)用,本地化的在線搜索應(yīng)用,本地化的在線 APP 等。
Apache 由于其多線程高并發(fā)共享內(nèi)存地址空間的特性,那就意味著如果服務(wù)器足夠強(qiáng)大,處理器足夠高核,Apache 的運(yùn)作將會(huì)非常良好,所以適用于(并發(fā))異步處理相對(duì)較少,后臺(tái)計(jì)算量大,后臺(tái)業(yè)務(wù)邏輯復(fù)雜的應(yīng)用程序。
感謝各位的閱讀!關(guān)于“Nodejs能夠應(yīng)用于什么場(chǎng)景”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。