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

 

1、高并發(fā)

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

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

延伸閱讀

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