Node.js采用 事件驅(qū)動(dòng) 和 異步I/O 的方式,實(shí)現(xiàn)了一個(gè)單線程、高并發(fā)的運(yùn)行時(shí)環(huán)境,而單線程就意味著同一時(shí)間只能做一件事,那么Node.js如何利用單線程來(lái)實(shí)現(xiàn)高并發(fā)和異步I/O?本文將圍繞這個(gè)問(wèn)題來(lái)探討Node.js的單線程模型:

 

1、高并發(fā)

一般來(lái)說(shuō),高并發(fā)的解決方案就是多線程模型,服務(wù)器為每個(gè)客戶端請(qǐng)求分配一個(gè)線程,使用同步I/O,系統(tǒng)通過(guò)線程切換來(lái)彌補(bǔ)同步I/O調(diào)用的時(shí)間開(kāi)銷,比如Apache就是這種策略,由于I/O一般都是耗時(shí)操作,因此這種策略很難實(shí)現(xiàn)高性能,但非常簡(jiǎn)單,可以實(shí)現(xiàn)復(fù)雜的交互邏輯。

而事實(shí)上,大多數(shù)網(wǎng)站的服務(wù)器端都不會(huì)做太多的計(jì)算,它們只是接收請(qǐng)求,交給其它服務(wù)(比如從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)),然后等著結(jié)果返回再發(fā)給客戶端。因此,Node.js針對(duì)這一事實(shí)采用了單線程模型來(lái)處理,它不會(huì)為每個(gè)接入請(qǐng)求分配一個(gè)線程,而是用一個(gè)主線程處理所有的請(qǐng)求,然后對(duì)I/O操作進(jìn)行異步處理,避開(kāi)了創(chuàng)建、銷毀線程以及在線程間切換所需的開(kāi)銷和復(fù)雜性。

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式