我發(fā)現(xiàn)有些很基礎的東西,看了就忘了乙漓,有必要記錄一下级历,以防以后忘了再回來看看。
讀取一個文件叭披,然后打印出來
阻塞方式
var fs = require("fs");
var data = fs.readFileSync('input.txt');
console.log(data.toString());
console.log("程序執(zhí)行結束!");
輸出
菜鳥教程官網地址:www.runoob.com
程序執(zhí)行結束!
阻塞的方式就是我(readFileSync)今天不讀完這個文件寥殖,你們誰都TM的不準動,所以如果這個文件讀了5分鐘涩蜘,沒辦法后面的代碼也得老老實實等著嚼贡,那這樣肯定是不行的,這個耗時的代碼可以放一邊執(zhí)行同诫,不要影響后面的代碼粤策。
非阻塞方式
var fs = require("fs");
fs.readFile('input.txt', function (err, data) {
if (err) return console.error(err);
console.log(data.toString());
});
console.log("程序執(zhí)行結束!");
輸出
程序執(zhí)行結束!
菜鳥教程官網地址:www.runoob.com
這個就是我(console.log)先執(zhí)行了,你(readFile)那么耗時間還不用CPU不是浪費嗎误窖?你就后面在運行把叮盘。
一個形象的比喻
阻塞和非阻塞秩贰,同步和異步是node.js里經常遇到的詞匯,我舉個簡單的例子來說明:
我要看足球比賽柔吼,但是媽媽叫我燒水毒费,電視機在客廳,燒水要在廚房愈魏。家里有2個水壺觅玻,一個是普通的水壺,另一個是水開了會叫的那種水壺培漏。我可以:
- 用普通的水壺燒溪厘,人在邊上看著,水開了再去看球牌柄。(
同步桩匪,阻塞
)這個是常規(guī)做法,但是我看球不爽了友鼻。- 用普通水壺燒,人去看球闺骚,隔幾分鐘去廚房看看彩扔。(
同步,非阻塞
)這個又大問題僻爽,萬一在我離開的幾分鐘水開了虫碉,我就麻煩了。- 用會叫的水壺胸梆,人在邊上看著敦捧。(
異步,阻塞
)這個沒有問題碰镜,但是我太傻了兢卵。- 用會叫的水壺,人去看球绪颖,聽見水壺叫了再去看秽荤。(
異步,非阻塞
)這個應該是最好的柠横。
等著看球的我:阻塞
看著電視的我:非阻塞
普通水壺:同步
會叫的水壺:異步
所以窃款,異步往往配合非阻塞,才能發(fā)揮出威力牍氛。