1. 程式人生 > >理解Node.js的非同步非阻塞I/O模型

理解Node.js的非同步非阻塞I/O模型

對後臺伺服器程式設計不清楚,通過在網上查資料也就大概有寫了解。

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