最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

很多人都不明白其原理,下面我來(lái)談?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ù)并沒(méi)有執(zhí)行)
setTimeout(() => {
    console.log(a);
}, 0)
// 第三步:賦值,回調(diào)函數(shù)沒(méi)有執(zhí)行
a = 2;
// 第四步:發(fā)出指令,然后把回調(diào)函數(shù)加入異步隊(duì)列(回調(diào)函數(shù)并沒(méi)有執(zhí)行)
setTimeout(() => {
    console.log(a);
}, 0)
// 第五步:賦值,回調(diào)函數(shù)沒(méi)有執(zhí)行
a = 3;
// 當(dāng)所有代碼執(zhí)行完畢,cpu空閑下來(lái)了,就會(huì)開(kāi)始遍歷執(zhí)行事件隊(duì)列里面的回調(diào)函數(shù)
// 所以最后控制臺(tái)輸出:3 3
  • b. 擁有異步I/O的node為什么可以支持高并發(fā)呢?

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

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

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

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

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

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

在過(guò)去單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)來(lái)完成多任務(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多站點(diǎn)切換Htpps協(xié)議詳解及簡(jiǎn)單實(shí)例

    Nodejs多站點(diǎn)切換Htpps協(xié)議詳解及簡(jiǎn)單實(shí)例

    這篇文章主要介紹了Nodejs多站點(diǎn)切換Htpps協(xié)議詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Node.js學(xué)習(xí)教程之HTTP/2服務(wù)器推送【譯】

    Node.js學(xué)習(xí)教程之HTTP/2服務(wù)器推送【譯】

    這篇文章主要給大家介紹了關(guān)于Node.js學(xué)習(xí)教程之HTTP/2服務(wù)器推送的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • 在Node.js中處理Promise中錯(cuò)誤的示例代碼

    在Node.js中處理Promise中錯(cuò)誤的示例代碼

    在現(xiàn)代JavaScript開(kāi)發(fā)中,尤其在Node.js環(huán)境中,Promise已成為處理異步操作的重要方式,然而,Promise的錯(cuò)誤處理卻常常讓開(kāi)發(fā)者感到困惑,在這篇文章中,我們將深入探討如何在Node.js中處理Promise中的錯(cuò)誤,提供多個(gè)示例代碼,以便于理解和實(shí)踐,需要的朋友可以參考下
    2024-09-09
  • node使用UEditor富文本編輯器的方法實(shí)例

    node使用UEditor富文本編輯器的方法實(shí)例

    本篇文章主要介紹了node使用UEditor富文本編輯器的方法實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-07-07
  • node.js通過(guò)axios實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求的方法

    node.js通過(guò)axios實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求的方法

    下面小編就為大家分享一篇node.js通過(guò)axios實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • 從reflect?metadata理解Nest實(shí)現(xiàn)原理

    從reflect?metadata理解Nest實(shí)現(xiàn)原理

    這篇文章主要為大家介紹了從reflect?metadata理解Nest實(shí)現(xiàn)原理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • npm報(bào)錯(cuò):request to httpsregistry.npm.taobao.org failed, reason certificate has expired的解決方案

    npm報(bào)錯(cuò):request to httpsregistry.npm.taobao.org 

    這篇文章主要介紹了npm報(bào)錯(cuò):request to httpsregistry.npm.taobao.org failed, reason certificate has expired的解決方案,文中有詳細(xì)的解決方案,需要的朋友可以參考下
    2024-03-03
  • node.js的require()及基本用法

    node.js的require()及基本用法

    Node.js使用CommonJS模塊格式,通過(guò)require語(yǔ)句加載模塊,源碼分析了require語(yǔ)句的內(nèi)部運(yùn)行機(jī)制,包括基本用法、Module構(gòu)造函數(shù)、模塊實(shí)例的require方法、模塊的絕對(duì)路徑、加載模塊等,本文介紹node.js的require()及基本用法,感興趣的朋友一起看看吧
    2025-02-02
  • NodeJs中的VM模塊詳解

    NodeJs中的VM模塊詳解

    這篇文章主要介紹了NodeJs中的VM模塊詳解,本文講解了什么是VM? 、VM模塊的runInThisContext、runInThisContext方法等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • 更新Node.js的四種方法小結(jié)

    更新Node.js的四種方法小結(jié)

    Node.js是一個(gè)開(kāi)放源代碼的跨平臺(tái)JavaScript運(yùn)行環(huán)境,它在不同的平臺(tái)上都得到了廣泛使用和支持,強(qiáng)大的生態(tài)系統(tǒng)、持續(xù)的更新和不斷改進(jìn)的性能使得Node.js非常受歡迎,然而,更新Node.js仍然是一個(gè)必要的過(guò)程,本文給大家介紹一些有關(guān)如何更新Node.js的方法
    2023-11-11

最新評(píng)論

庆云县| 元朗区| 三门县| 灌阳县| 格尔木市| 华容县| 郓城县| 岗巴县| 涟源市| 万源市| 新巴尔虎右旗| 铜陵市| 包头市| 九江市| 弥勒县| 措勤县| 柘荣县| 南安市| 广平县| 清水县| 隆昌县| 绥宁县| 通州区| 荆门市| 丽水市| 资源县| 馆陶县| 石首市| 凤山市| 广安市| 桃园市| 沧州市| 上饶县| 三亚市| 红安县| 吉木萨尔县| 镇宁| 琼中| 徐州市| 西吉县| 义乌市|