nodejs 阻塞與非阻塞
阿新 • • 發佈:2019-01-07
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('讀取檔案');
/*
輸出的結果:
讀取檔案
讀取的內容
*/
阻塞 & 非阻塞
仔細看兩個程式碼,會發現除了程式碼不同之外,輸出的結果的順序不同。
前者先輸出檔案內容,後輸出讀取檔案
。
而後者正好相反。
阻塞的執行是按照順序執行的,等結果回來繼續往下執行。
而非阻塞則是不用等待程式碼返回結果,直接往下一步執行。
而非阻塞這樣的執行,正是事件驅動的起的作用。
而非阻塞這樣的設計可以大大的提高程式效能,減少了程式的等待時間。