站長資訊網(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號
91精品国产91久久久久久最新 | 中文字幕日韩精品无码内射 | 成品人和精品人的区别在哪里| 日韩精品免费电影| 国产成人无码精品久久二区三区| 色综合久久精品亚洲国产| 精品91自产拍在线| 3d动漫精品一区视频在线观看 | 日韩福利视频导航| 国产精品无码专区AV在线播放| 国产在视频线精品视频2021| 久久久久亚洲精品日久生情| 嫩草伊人久久精品少妇AV| 久久精品视频国产| 精品国产91久久久久久久 | 日韩精品专区在线影院重磅| 国产成人精品免费视频网页大全| 久久精品亚洲精品国产色婷| 欧洲精品99毛片免费高清观看| 久久99热精品这里久久精品| 国产国产精品人在线视| 国产精品无码无在线观看| 中文字幕精品亚洲无线码一区| 久久这里有精品视频| 久久精品国产精品亜洲毛片| 精品久久久无码中文字幕天天| 国产精品无码专区在线观看| 国产精品乱码一区二区三区| 国产69精品久久久久99尤物| 亚洲精品线路一在线观看| 一区精品麻豆入口| 亚洲精品综合久久| 精品国产呦系列在线观看免费| 国产乱人伦偷精品视频免观看| 国产精品一区二区三区99| 精品国精品国产自在久国产应用男| 亚洲精品成人a在线观看| 精品人妻少妇一区二区三区在线| 精品亚洲一区二区三区在线观看 | 亚洲欧美日韩中文二区 | 精品熟女少妇a∨免费久久|