站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

node都是單線程運行的嗎

node是單線程運行的,采用單線程異步非阻塞模式;但是嚴格來說node中存在著多種線程,單線程是指node中只有一個js引擎在主線程上運行,其他的異步操作也是有獨立的線程去執(zhí)行,同時node默認是單線程,一個“node.js”無法利用多核資源。

node都是單線程運行的嗎

本教程操作環(huán)境:windows10系統(tǒng)、nodejs 12.19.0版本、Dell G3電腦。

node都是單線程運行的嗎

node是單線程運行的,采用單線程異步非阻塞模式。

提到node,我們就可以立刻想到單線程、異步IO、事件驅(qū)動等字眼。首先要明確的是node真的是單線程的嗎,如果是單線程的,那么異步IO,以及定時事件(setTimeout、setInterval等)又是在哪里被執(zhí)行的。

其實,按照嚴格來說,node并不是單線程的。node中存在著多種線程,包括:

js引擎執(zhí)行的線程

定時器線程(setTimeout, setInterval)

異步http線程(ajax)

我們平時所說的單線程是指node中只有一個js引擎在主線程上運行。其他異步IO和事件驅(qū)動相關(guān)的線程通過libuv來實現(xiàn)內(nèi)部的線程池和線程調(diào)度。libv中存在了一個Event Loop,通過Event Loop來切換實現(xiàn)類似于多線程的效果。簡單的來講Event Loop就是維持一個執(zhí)行棧和一個事件隊列,當(dāng)前執(zhí)行棧中的如果發(fā)現(xiàn)異步IO以及定時器等函數(shù),就會把這些異步回調(diào)函數(shù)放入到事件隊列中。當(dāng)前執(zhí)行棧執(zhí)行完成后,從事件隊列中,按照一定的順序執(zhí)行事件隊列中的異步回調(diào)函數(shù)。

node都是單線程運行的嗎

上圖中從執(zhí)行棧,到事件隊列,最后事件隊列中按照一定的順序執(zhí)行回調(diào)函數(shù),整個過程就是一個簡化版的Event Loop。此外回調(diào)函數(shù)執(zhí)行時,同樣會生成一個執(zhí)行棧,在回調(diào)函數(shù)里面還有可能嵌套異步的函數(shù),也就是說執(zhí)行棧存在著嵌套。

也就是說node中的單線程是指js引擎只在唯一的主線程上運行,其他的異步操作,也是有獨立的線程去執(zhí)行,通過libv的Event Loop實現(xiàn)了類似于多線程的上下文切換以及線程池調(diào)度。線程是最小的進程,因此node也是單進程的。這樣就解釋了為什么node是單線程和單進程的。

推薦學(xué)習(xí):《nodejs視頻教程》

贊(0)
分享到: 更多 (0)
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
无码人妻精品一区二区三区99仓本 | 日韩在线观看免费完整版视频| 久久久国产亚洲精品| 无码人妻精品一区二区三区在线 | 夜精品a一区二区三区| 99国产精品国产精品九九| 99re这里有免费视频精品| 亚洲国产精品无码一线岛国| 亚洲精品乱码久久久久久久久久久久 | 精品国内自产拍在线视频| 日韩一区二区电影| 国产精品免费看久久久无码| 精品久久国产视频| 国产精品沙发午睡系列| 久久亚洲精品11p| 人妻少妇精品专区性色AV| 在线精品自偷自拍无码中文| 无码欧精品亚洲日韩一区夜夜嗨 | aaaaaa精品视频在线观看| 国产乱码伦精品一区二区三区麻豆| 男女男精品视频网站在线观看| 日韩成人av在线| 日韩欧群交P片内射中文| 国产日韩久久免费影院| 日韩电影免费在线观看中文字幕| 国产伦精品一区二区三区四区| 国产精品天干天干| 国产精品久久现线拍久青草| 国产真实乱人偷精品| 国产三级久久精品三级| 日韩视频无码日韩视频又2021| 免费久久精品国产片香蕉| 国产日韩高清三级精品人成| 亚洲日韩av无码| 精品一区二区三区无码视频 | 99rv精品视频在线播放| 国产精品久久久久久久久久影院| 亚洲a∨无码精品色午夜| 精品国产香蕉伊思人在线又爽又黄| 尤物在线观看精品国产福利片| 国产伦精品一区二区三区四区|