1. 程式人生 > >node單執行緒非同步模型

node單執行緒非同步模型

提到nodejs都知道單執行緒非同步I/O,但是能說清楚為什麼單執行緒非同步I/O,為什麼能增加網路吞吐量,怎麼充分利用cpu資源嗯,這個知道的就不多了。

首先要說的是I/O,I/O是計算機的抽象概念,指的是鍵盤,滑鼠,印表機,套接字等和記憶體之間的資料交換,I/O的速度是很慢的,知道計算機存貯模型的都知道,在這裡面套接字被抽象成檔案,有固定的ip和埠號,這就是網路I/O,當啟動了node程序開了服務,監聽了80埠。node就能讀取這次連線操作,這就是網路I/O。 其實node本身並不是單執行緒的,而是多執行緒。I/O是有單獨的執行緒池,並且多個I/O之間可以是並行操作的。

你可能會問,那node的單執行緒指的是什麼呢?其實它是指node中對js的執行是單執行緒的。 你可能會問,node相對與其他語言,為什麼吞吐量大呢?其實這裡涉及到事件迴圈機制。有的語言一個程序對應一個連線,這是很耗費效能的。有的是一個執行緒對應一個連線。我們知道程序執行緒間切換比較耗費效能。node的單執行緒是當一個請求到達時,node執行緒根據套接字生成一個請求物件,然後將這個請求物件傳送個事件迴圈,由事件迴圈呼叫業務邏輯。一旦生成請求物件,該執行緒就能接受新的請求。而不用等待業務程式碼結束。 node的事件迴圈又是什麼東西呢?其實這就是單執行緒實現非同步的原理。一旦有事件進入,就會生成事件迴圈。這裡可能又有疑問,這樣的事件迴圈不是耗費cpu效能嗎?事件沒有結束一直迴圈,其實不會的參考前面的文章node事件迴圈。