亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

nodejs如何解決高并發(fā)問題

 更新時(shí)間:2023年10月30日 09:33:19   作者:高先生的貓  
這篇文章主要介紹了nodejs如何解決高并發(fā)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Node可以在不新增額外線程的情況下,依然可以對(duì)任務(wù)進(jìn)行并發(fā)處理 —— Node.js是單線程的。

它通過事件循環(huán)(event loop)來實(shí)現(xiàn)并發(fā)操作,對(duì)此,我們應(yīng)該要充分利用這一點(diǎn) —— 盡可能的避免阻塞操作,取而代之,多使用非阻塞操作。

node單線程實(shí)現(xiàn)高并發(fā)原理

眾所周知nodejs是單線程且支持高并發(fā)的腳本語言。

可為什么單線程的nodejs可以支持高并發(fā)呢?

很多人都不明白其原理,下面我來談?wù)勎业睦斫猓?/p>

node的優(yōu)點(diǎn)

I/O密集型處理是node的強(qiáng)項(xiàng),因?yàn)閚ode的I/O請(qǐng)求都是異步的(如:sql查詢請(qǐng)求、文件流操作操作請(qǐng)求、http請(qǐng)求...)

  • a. 什么是異步?

異步:發(fā)出操作指令,然后就可以去做別的事情了(主線程不需要等待),所有操作完成后再執(zhí)行回調(diào)

異步的示例: 

// 第一步:定義變量
let a = 1;
 
// 第二步:發(fā)出指令,然后把回調(diào)函數(shù)加入事件隊(duì)列(回調(diào)函數(shù)并沒有執(zhí)行)
setTimeout(() => {
    console.log(a);
}, 0)
// 第三步:賦值,回調(diào)函數(shù)沒有執(zhí)行
a = 2;
// 第四步:發(fā)出指令,然后把回調(diào)函數(shù)加入異步隊(duì)列(回調(diào)函數(shù)并沒有執(zhí)行)
setTimeout(() => {
    console.log(a);
}, 0)
// 第五步:賦值,回調(diào)函數(shù)沒有執(zhí)行
a = 3;
// 當(dāng)所有代碼執(zhí)行完畢,cpu空閑下來了,就會(huì)開始遍歷執(zhí)行事件隊(duì)列里面的回調(diào)函數(shù)
// 所以最后控制臺(tái)輸出:3 3
  • b. 擁有異步I/O的node為什么可以支持高并發(fā)呢?

因?yàn)镮/O操作是由node的工作線程去執(zhí)行的(nodejs底層的libuv是多線程的線程池用來并行io操作),且主線程是不需要等待結(jié)果返回的,只要發(fā)出指令馬上就可以去忙其他事情了?! ?strong> 

額外知識(shí)點(diǎn)

  • c. 雖然nodejs的I/O操作開啟了多線程,但是所有線程都是基于node服務(wù)進(jìn)程開啟的,并不能充分利用cpu資源

pm2進(jìn)程管理器可以解決這個(gè)問題

pm2 是一個(gè)帶有負(fù)載均衡功能的Node應(yīng)用的進(jìn)程管理器.

  • d. cpu核數(shù)與線程之間的關(guān)系

在過去單CPU時(shí)代,單任務(wù)在一個(gè)時(shí)間點(diǎn)只能執(zhí)行單一程序。之后發(fā)展到多任務(wù)階段,計(jì)算機(jī)能在同一時(shí)間點(diǎn)并行執(zhí)行多任務(wù)或多進(jìn)程。

雖然并不是真正意義上的“同一時(shí)間點(diǎn)”,而是多個(gè)任務(wù)或進(jìn)程共享一個(gè)CPU,并交由操作系統(tǒng)來完成多任務(wù)間對(duì)CPU的運(yùn)行切換,以使得每個(gè)任務(wù)都有機(jī)會(huì)獲得一定的時(shí)間片運(yùn)行。

而現(xiàn)在多核CPU的情況下,同一時(shí)間點(diǎn)可以執(zhí)行多個(gè)任務(wù),具體到這個(gè)任務(wù)在CPU哪個(gè)核上運(yùn)行,這個(gè)就跟操作系統(tǒng)和CPU本身的設(shè)計(jì)相關(guān)了

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • NodeJS http模塊用法示例【創(chuàng)建web服務(wù)器/客戶端】

    NodeJS http模塊用法示例【創(chuàng)建web服務(wù)器/客戶端】

    這篇文章主要介紹了NodeJS http模塊用法,結(jié)合實(shí)例形式分析了node.js創(chuàng)建web服務(wù)器與客戶端,進(jìn)行HTTP通信的相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • nodejs同步調(diào)用獲取mysql數(shù)據(jù)時(shí)遇到的大坑

    nodejs同步調(diào)用獲取mysql數(shù)據(jù)時(shí)遇到的大坑

    今天小編就為大家分享一篇關(guān)于nodejs同步調(diào)用獲取mysql數(shù)據(jù)時(shí)遇到的大坑,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • nodejs的http和https下載遠(yuǎn)程資源post數(shù)據(jù)實(shí)例

    nodejs的http和https下載遠(yuǎn)程資源post數(shù)據(jù)實(shí)例

    這篇文章主要為大家介紹了nodejs的http和https下載遠(yuǎn)程資源post數(shù)據(jù)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • 詳解Node.JS模塊 process

    詳解Node.JS模塊 process

    這篇文章主要介紹了Node.JS模塊 process的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)node.js,感興趣的朋友可以了解下
    2020-08-08
  • Node.js對(duì)MongoDB數(shù)據(jù)庫實(shí)現(xiàn)模糊查詢的方法

    Node.js對(duì)MongoDB數(shù)據(jù)庫實(shí)現(xiàn)模糊查詢的方法

    模糊查詢是數(shù)據(jù)庫的基本操作之一,下面這篇文章主要給大家介紹了利用Node.js對(duì)MongoDB數(shù)據(jù)庫實(shí)現(xiàn)模糊查詢的方法教程,文中給出了詳細(xì)的介紹和示例代碼,對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • 使用Node.js實(shí)現(xiàn)base64和png文件相互轉(zhuǎn)換的方法

    使用Node.js實(shí)現(xiàn)base64和png文件相互轉(zhuǎn)換的方法

    這篇文章主要介紹了使用Node.js實(shí)現(xiàn)base64和png文件相互轉(zhuǎn)換的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 淺談Koa2框架利用CORS完成跨域ajax請(qǐng)求

    淺談Koa2框架利用CORS完成跨域ajax請(qǐng)求

    這篇文章主要介紹了淺談Koa2框架利用CORS完成跨域ajax請(qǐng)求,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • Node.js實(shí)現(xiàn)登錄注冊(cè)功能

    Node.js實(shí)現(xiàn)登錄注冊(cè)功能

    這篇文章主要為大家詳細(xì)介紹了Node.js實(shí)現(xiàn)登錄注冊(cè)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • nodejs使用express獲取get和post傳值及session驗(yàn)證的方法

    nodejs使用express獲取get和post傳值及session驗(yàn)證的方法

    這篇文章主要介紹了nodejs使用express獲取get和post傳值及session驗(yàn)證的方法,結(jié)合實(shí)例形式分析了nodejs使用express實(shí)現(xiàn)獲取get和post傳值及session驗(yàn)證功能的具體操作步驟與注意事項(xiàng),需要的朋友可以參考下
    2017-11-11
  • Node.js包管理器Yarn的入門介紹與安裝

    Node.js包管理器Yarn的入門介紹與安裝

    大家都知道在yarn發(fā)布之前,所有Nodejs開發(fā)者用的都是npm包管理工具,而npm工具存在挺多難以忍受的詬病,包括安裝速度慢、每次都要在線重新安裝等問題,而yarn也是為了解決npm當(dāng)前所存在的問題而出現(xiàn)的。本文給大家介紹了包管理器Yarn,以及安裝方法。下面來一起看看。
    2016-10-10

最新評(píng)論