NodeJS真的是單執行緒嗎?

2021-06-26 01:01:38 字數 1046 閱讀 2397

要理解這個問題,我們先思考乙個麥當勞的服務員的例子。

我們去了麥當勞,向服務員點乙份薯條。這時,服務員並不是立刻把薯條給我們,只是給廚房送入你的點單。然後我們在一旁等待。

這時服務員又開始接受下一位顧客的點單。同樣的,服務員並不會立刻把食物送出,他只是給廚房送入你點的單而已。

5分鐘後,我們的薯條炸好了。廚房師傅把薯條放在視窗,同時打一聲鈴。聽到鈴聲後,服務員就把我們的薯條交給我們了。

nodejs其實也是這樣的執行邏輯。所以從整個系統的角度看,nodejs不是單執行緒。但是從你的**看,nodejs是單執行緒,因為你的**

就是那個服務員,你同時只能做一件事情。但幸運的是,你不需要親自去做,你只需要向另乙個叫event loop的執行緒發出你的請求,event loop

又會開啟系統中的執行緒,去做實際的工作。當工作完成時,event loop執行緒向你返回結果。你再做相應的處理。

所以,對於nodejs,有這樣的一句話:

everything runs in parallel except your code

寫段**來驗證一下吧:

'use strict';

var fs = require('fs');

fs.mkdir('./test',function(err,data));

while(true)

看一下這段**,思考:

1. test資料夾會被建立嗎?

2. success或者err資訊會被控制台輸出嗎?

我們一步步分析。首先**向event loop執行緒發出乙個請求,要它建立test資料夾。當test資料夾建立成功後,**輸出success資訊。當**執行到這裡時,建立資料夾的請求已經被發出了。所以資料夾會被建立。

然後**進入while迴圈,並一直停留在這裡。

當event loop建立完資料夾並把這個資訊返回時,**並不能處理這個資訊,因為**會一直留在while迴圈裡面。所以success資訊不會被列印。

以上,就是nodejs雖然是單執行緒,但卻可以快速響應請求的原因了。

NodeJS 真的是單執行緒嗎

node 只是主線程是單執行緒,主線程中的操作是同步阻塞的。但它把所有需要非同步的操作扔給了io執行緒池,主線程通過一定的事件輪詢機制與io執行緒池互動得到非同步資料。依靠事件驅動。每個node.js程序只有乙個主線程在執行程式 形成乙個執行棧 execution context stack 主線程...

node真的是單執行緒模式嗎

提到node,我們就可以立刻想到單執行緒 非同步io 事件驅動等字眼。首先要明確的是node真的是單執行緒的嗎,如果是單執行緒的,那麼非同步io,以及定時事件 settimeout setinterval等 又是在 被執行的。其實,按照嚴格來說,node並不是單執行緒的。node中存在著多種執行緒,...

nodejs 單執行緒 高併發

nodejs為什麼是單執行緒且支援高併發的指令碼語言呢?1.node的優點 i o密集型處理 node的i o請求都是非同步的,如 sql查詢 檔案流操作 http請求 非同步i o?顧名思義就是非同步的發出i o請求 要理解node的原理,可能還需要了解一些多執行緒或者併發的基本知識。nodejs...