理解Node.js的异步非阻塞I/O模型
對(duì)后臺(tái)服務(wù)器編程不清楚,通過(guò)在網(wǎng)上查資料也就大概有寫了解。
Apache對(duì)并發(fā)請(qǐng)求的處理方式是,對(duì)每個(gè)請(qǐng)求就創(chuàng)建一個(gè)線程處理,這個(gè)線程是堵塞的。因?yàn)榫€程的是占用內(nèi)存的,所以一臺(tái)服務(wù)器能支持的并發(fā)線程量是有限的。
node.js是單線程的模型,但是線程是異步非堵塞的
比如下面的例子:
var fs = require("fs"); fs.readFile("./testfile", "utf8", function(error, file) { if (error) throw error; console.log("我讀完文件了!"); }); console.log("我不會(huì)被阻塞!");復(fù)制上面代碼保存為test.js,并在同一目錄下新建一個(gè)名為testfile的文件,用node命令運(yùn)行test.js,你將看到以下輸出:
我不會(huì)被阻塞!
我讀完文件了!
這顯然不符合傳統(tǒng)的程序執(zhí)行順序,注意,這就是Node.js的非阻塞I/O了。
進(jìn)行I/O操作,給readFile綁定一個(gè)回調(diào)函數(shù)function(error,file){},并在讀取testfile完成后執(zhí)行回調(diào)函數(shù)。期間,后面的代碼繼續(xù)執(zhí)行,不受I/O阻塞。
這就是為什么先看到“我不會(huì)被阻塞!”而后看到“我讀完文件了!”的緣故。
參考:
http://cnodejs.org/topic/4f50dd9798766f5a610b808a
總結(jié)
以上是生活随笔為你收集整理的理解Node.js的异步非阻塞I/O模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: sgi 之heap, priority_
- 下一篇: linux shell if 参数