1. 程式人生 > >nodejs 阻塞與非阻塞

nodejs 阻塞與非阻塞

nodejs 是基於驅動事件的非阻塞I/O模型,node 中所有的api 都支援回撥函式,為什麼要這麼做?這麼做有什麼優點?

阻塞讀取

var fs = require('fs');
var data = fs.readFileSync('1.txt');
console.log(data);
console.log('讀取檔案');

/*
輸出的結果:
    讀取的內容
    讀取檔案
*/

非阻塞讀取

var fs = require('fs')
fs.readFile('1.txt',function(err,data){
    console.log(data
); }); console.log('讀取檔案'); /* 輸出的結果: 讀取檔案 讀取的內容 */

阻塞 & 非阻塞

仔細看兩個程式碼,會發現除了程式碼不同之外,輸出的結果的順序不同。

前者先輸出檔案內容,後輸出讀取檔案
而後者正好相反。

阻塞的執行是按照順序執行的,等結果回來繼續往下執行。
而非阻塞則是不用等待程式碼返回結果,直接往下一步執行。

而非阻塞這樣的執行,正是事件驅動的起的作用。

而非阻塞這樣的設計可以大大的提高程式效能,減少了程式的等待時間。