目錄
node都是單執行緒運行的嗎
首頁 web前端 前端問答 node都是單執行緒運行的嗎

node都是單執行緒運行的嗎

Jun 15, 2022 pm 04:57 PM
node

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

node都是單執行緒運行的嗎

本教學操作環境:windows10系統、nodejs 12.19.0版本、Dell G3電腦。

node都是單執行緒運行的嗎

node是單執行緒運行的,採用單執行緒異步非阻塞模式。

提到node,我們就可以立刻想到單執行緒、非同步IO、事件驅動等字眼。首先要明確的是node真的是單線程的嗎,如果是單線程的,那麼非同步IO,以及定時事件(setTimeout、setInterval等)又是在哪裡執行的。

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

js引擎執行的線程

計時器線程(setTimeout, setInterval)

異步http線程(ajax)

     我們平常所說的單執行緒是指node中只有一個js引擎在主執行緒上運作。其他非同步IO和事件驅動相關的執行緒透過libuv來實現內部的執行緒池和執行緒調度。 libv中存在了一個Event Loop,透過Event Loop來切換實作類似多執行緒的效果。簡單的來講Event Loop就是維持一個執行棧和一個事件佇列,當前執行棧中的如果發現異步IO以及定時器等函數,就會把這些非同步回呼函數放入到事件佇列中。目前執行堆疊執行完成後,從事件佇列中,依照一定的順序執行事件佇列中的非同步回呼函數。

node都是單執行緒運行的嗎

上圖中從執行棧,到事件佇列,最後事件佇列中依照一定的順序執行回呼函數,整個過程就是一個簡化版的Event Loop。另外回呼函數執行時,同樣會產生一個執行棧,在回呼函數裡面還有可能巢狀異步的函數,也就是說執行棧存在著巢狀。

      也就是說node中的單執行緒是指js引擎只在唯一的主執行緒上運行,其他的非同步操作,也是有獨立的執行緒去執行,透過libv的Event Loop實現了類似於多線程的上下文切換以及線程池調度。執行緒是最小的進程,因此node也是單進程的。這樣就解釋了為什麼node是單執行緒和單一進程的。

推薦學習:《nodejs影片教學

以上是node都是單執行緒運行的嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

nvm 怎麼刪除node nvm 怎麼刪除node Dec 29, 2022 am 10:07 AM

nvm 怎麼刪除node

node專案中如何使用express來處理檔案的上傳 node專案中如何使用express來處理檔案的上傳 Mar 28, 2023 pm 07:28 PM

node專案中如何使用express來處理檔案的上傳

Node服務怎麼進行Docker鏡像化?極致優化詳解 Node服務怎麼進行Docker鏡像化?極致優化詳解 Oct 19, 2022 pm 07:38 PM

Node服務怎麼進行Docker鏡像化?極致優化詳解

深入淺析Node的進程管理工具'pm2” 深入淺析Node的進程管理工具'pm2” Apr 03, 2023 pm 06:02 PM

深入淺析Node的進程管理工具'pm2”

Pi Node教學:什麼是Pi節點?如何安裝和設定Pi Node? Pi Node教學:什麼是Pi節點?如何安裝和設定Pi Node? Mar 05, 2025 pm 05:57 PM

Pi Node教學:什麼是Pi節點?如何安裝和設定Pi Node?

聊聊用pkg將Node.js專案打包為執行檔的方法 聊聊用pkg將Node.js專案打包為執行檔的方法 Dec 02, 2022 pm 09:06 PM

聊聊用pkg將Node.js專案打包為執行檔的方法

使用Angular和Node進行基於令牌的身份驗證 使用Angular和Node進行基於令牌的身份驗證 Sep 01, 2023 pm 02:01 PM

使用Angular和Node進行基於令牌的身份驗證

IDEA中怎麼設定安裝node.js?方法淺析 IDEA中怎麼設定安裝node.js?方法淺析 Dec 21, 2022 pm 08:28 PM

IDEA中怎麼設定安裝node.js?方法淺析

See all articles