1 回答

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊
就是去處理其他請(qǐng)求。
Node.js的主線程是不會(huì)處于block(等待)狀態(tài)的,除非使用fs.readFileSync等node api里的同步方法。
Node.js使用的是Reactor模式,凡是遇到需要block的地方,要么使用系統(tǒng)的異步API(網(wǎng)絡(luò)請(qǐng)求),要么扔到線程池里(文件讀寫)去做,主線程接著處理其他請(qǐng)求。
簡單描述Node.js主線程的工作順序:
執(zhí)行到時(shí)的Timer
檢查異步操作隊(duì)列里是否有已完成的,并執(zhí)行回調(diào)
檢查新的連接
回到1
所以多請(qǐng)求并發(fā)的時(shí)候,Node.js本質(zhì)上是在排隊(duì),但是每個(gè)人等待的時(shí)間都很短,除非每個(gè)請(qǐng)求都耗費(fèi)大量CPU時(shí)間。一般來說web server大多數(shù)時(shí)間都在等IO(網(wǎng)絡(luò)請(qǐng)求),所以Node.js這種Reactor模式的Server對(duì)于CPU利用是相對(duì)高效的,避免了線程切換導(dǎo)致的的CPU上下文切換。
添加回答
舉報(bào)