欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          node都是單線程運行的嗎

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

          node都是單線程運行的嗎

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

          node都是單線程運行的嗎

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

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

          其實,按照嚴(yán)格來說,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)度。線程是最小的進(jìn)程,因此node也是單進(jìn)程的。這樣就解釋了為什么node是單線程和單進(jìn)程的。

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

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號