nodejs 單執行緒 高併發

2021-09-07 20:37:48 字數 527 閱讀 2343

nodejs為什麼是單執行緒且支援高併發的指令碼語言呢?

1.node的優點:i/o密集型處理(node的i/o請求都是非同步的,如:sql查詢、檔案流操作、http請求……);非同步i/o?

顧名思義就是非同步的發出i/o請求

要理解node的原理,可能還需要了解一些多執行緒或者併發的基本知識。

nodejs的單執行緒指的是主線程是「單執行緒」,由主線程去按照編碼順序一步步執行程式**,假如遇到同步**阻塞,主線程被占用,後續的程式**就會被卡主。

nodejs的單執行緒只是乙個js主線程,本質上的一步操作還是由執行緒池完成的。node將所有的阻塞操作都交給了內部的執行緒池去實現,本身只負責不斷的往返排程,並沒有進行真正的i/o操作,從而實現非同步非阻塞i/o。

nodejs之所以單執行緒可以處理高併發的原因,在於libuv層的事件迴圈機制,和底層執行緒池的實現。

(有待完善。)

Node單執行緒高併發原理

瀏覽器中的js是單執行緒的,node也是單執行緒的。這個單執行緒相當於乙個大管家,一切大小事務都要經過他的手才能辦成,它總是把io任務放入到任務池中。雖然說是單執行緒,但是node也有乙個執行緒池專門負責執行任務池中的任務,它們把任務完成之後會告知主線程以接下來利用cpu完成處理。關鍵在於理清哪些任...

NodeJS真的是單執行緒嗎?

要理解這個問題,我們先思考乙個麥當勞的服務員的例子。我們去了麥當勞,向服務員點乙份薯條。這時,服務員並不是立刻把薯條給我們,只是給廚房送入你的點單。然後我們在一旁等待。這時服務員又開始接受下一位顧客的點單。同樣的,服務員並不會立刻把食物送出,他只是給廚房送入你點的單而已。5分鐘後,我們的薯條炸好了。...

NodeJS 真的是單執行緒嗎

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