日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cpu多核 node 单线程_node单线程支撑高并发原理(node异步I/O)

發(fā)布時間:2024/8/1 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cpu多核 node 单线程_node单线程支撑高并发原理(node异步I/O) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

眾所周知nodejs是單線程且支持高并發(fā)的腳本語言。可為什么單線程的nodejs可以支持高并發(fā)呢?很多人都不明白其原理,下面我來談談我的理解:

1. node的優(yōu)點:I/O密集型處理是node的強項,因為node的I/O請求都是異步的(如:sql查詢請求、文件流操作操作請求、http請求...)

a. 什么是異步?

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

異步的示例:

//第一步:定義變量

let a = 1;//第二步:發(fā)出指令,然后把回調(diào)函數(shù)加入事件隊列(回調(diào)函數(shù)并沒有執(zhí)行)

setTimeout(() =>{

console.log(a);

},0)//第三步:賦值,回調(diào)函數(shù)沒有執(zhí)行

a = 2;//第四步:發(fā)出指令,然后把回調(diào)函數(shù)加入異步隊列(回調(diào)函數(shù)并沒有執(zhí)行)

setTimeout(() =>{

console.log(a);

},0)//第五步:賦值,回調(diào)函數(shù)沒有執(zhí)行

a = 3;//當所有代碼執(zhí)行完畢,cpu空閑下來了,就會開始遍歷執(zhí)行事件隊列里面的回調(diào)函數(shù)//所以最后控制臺輸出:3 3

b. 擁有異步I/O的node為什么可以支持高并發(fā)呢?

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

額外知識點:

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

pm2進程管理器可以解決這個問題

pm2 是一個帶有負載均衡功能的Node應用的進程管理器.

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

在過去單CPU時代,單任務在一個時間點只能執(zhí)行單一程序。之后發(fā)展到多任務階段,計算機能在同一時間點并行執(zhí)行多任務或多進程。雖然并不是真正意義上的“同一時間點”,而是多個任務或進程共享一個CPU,并交由操作系統(tǒng)來完成多任務間對CPU的運行切換,以使得每個任務都有機會獲得一定的時間片運行。而現(xiàn)在多核CPU的情況下,同一時間點可以執(zhí)行多個任務,具體到這個任務在CPU哪個核上運行,這個就跟操作系統(tǒng)和CPU本身的設計相關了

2. node的缺點:不擅長cpu密集型的操作

a. 什么是cpu密集型操作(復雜的運算、圖片的操作)

// 這就是一個cpu密集型的操作

for (let i = 0; i < 100000000; i++) {

console.log(i);

}

b. nodejs為什么不擅長cpu密集型操作

因為nodejs是單線程的,進行密集型的運算會導致主線程掛起

總結(jié)

以上是生活随笔為你收集整理的cpu多核 node 单线程_node单线程支撑高并发原理(node异步I/O)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。