高并發(fā)和吞吐量
因?yàn)?code>nodejs是單線程,所以我們說(shuō)的并發(fā)性主要是事件循環(huán)在主程完成處理后執(zhí)行回調(diào)函數(shù)的能力郭计。比如當(dāng)一個(gè)請(qǐng)求過(guò)來(lái),就是一個(gè)I/O
梧乘,服務(wù)端給每一個(gè)請(qǐng)求注冊(cè)一個(gè)I/O
庐杨,假設(shè)每個(gè)web服務(wù)器請(qǐng)求需要50ms
,其中的45ms
是可以用異步完成 的數(shù)據(jù)庫(kù)I/O
灵份,選擇非阻塞異步操作可以釋放每個(gè)請(qǐng)求45ms
來(lái)處理其他的請(qǐng)求。
不適合CPU密集型
因?yàn)?code>nodejs是單線程弦聂,只支持單核氛什,如果一個(gè)運(yùn)算量特別大的操作,會(huì)占滿cpu
的運(yùn)行時(shí)間枪眉,在時(shí)間片內(nèi)不會(huì)釋放,會(huì)導(dǎo)致整個(gè)程序卡欺冀,甚至崩潰。
如何解決呢:
- 將大的運(yùn)算任務(wù)隐轩,分成小任務(wù)
- 使用多fork模式
- 使用集群的方式,使用nginx做負(fù)責(zé)均衡