理解Node.js的非同步非阻塞I/O模型
阿新 • • 發佈:2019-02-09
對後臺伺服器程式設計不清楚,通過在網上查資料也就大概有寫了解。
Apache對併發請求的處理方式是,對每個請求就建立一個執行緒處理,這個執行緒是堵塞的。因為執行緒的是佔用記憶體的,所以一臺伺服器能支援的併發執行緒量是有限的。
node.js是單執行緒的模型,但是執行緒是非同步非堵塞的
比如下面的例子:
var fs = require("fs"); fs.readFile("./testfile", "utf8", function(error, file) { if (error) throw error; console.log("我讀完檔案了!"); }); console.log("我不會被阻塞!");
複製上面程式碼儲存為test.js,並在同一目錄下新建一個名為testfile的檔案,用node命令執行test.js,你將看到以下輸出:
我不會被阻塞!
我讀完檔案了!
這顯然不符合傳統的程式執行順序,注意,這就是Node.js的非阻塞I/O了。
進行I/O操作,給readFile繫結一個回撥函式function(error,file){},並在讀取testfile完成後執行回撥函式。期間,後面的程式碼繼續執行,不受I/O阻塞。
這就是為什麼先看到“我不會被阻塞!”而後看到“我讀完檔案了!”的緣故。
參考:
http://cnodejs.org/topic/4f50dd9798766f5a610b808a