深刻淺出Node.js - Node簡介

Node特色

  1. 異步IO
  2. 事件與回調函數
  3. 單線程
  4. 跨平臺

單線程優點:編程

  • 單線程的最大好處是不用像多線程編程那樣到處在乎狀態的同步問題
  • 沒有死鎖的存在
  • 沒有線程上下文交換所帶來的性能上的開銷

單線程劣勢:網絡

  • 沒法利用多核CPU
  • 錯誤會引發整個應用退出,應用的健壯性值得考驗
  • 大量計算佔用CPU致使沒法繼續調用異步I/O
Node採用了與Web Workers相同的思路來解決單線程中大計算量的問題:child_process。
子進程的出現,意味着Node能夠從容地應對單線程在健壯性和沒法利用多核CPU方面的問 題。經過將計算分發到各個子進程,能夠將大量計算分解掉,而後再經過進程之間的事件消息來 傳遞結果,這能夠很好地保持應用模型的簡單和低依賴。經過Master-Worker的管理方式,也能夠 很好地管理各個工做進程,以達到更高的健壯性。

Node應用場景

  1. IO密集型多線程

    Node面向網絡且擅長並行I/O,可以有效 地組織起更多的硬件資源,從而提供更多好的服務。I/O密集的優點主要在於Node利用事件循環的處理能力,而不是啓動每個線程爲每個請 求服務,資源佔用極少。
  2. CPU密集型解決方案異步

    Node的異步I/O已經解決了在單線程上CPU與I/O之間阻塞沒法重疊 利用的問題,Node雖然沒有提供多線程用於計算支持,可是仍是有如下兩個方式來充分利 用CPU。
    1.Node能夠經過編寫C/C++擴展的方式更高效地利用CPU
    2.若是單線程的Node不能知足需求,甚至用了C/C++擴展後還以爲不夠,那麼經過子進程的方式,將一部分Node進程當作常駐服務進程用於計算,而後利用進程間的消息來傳遞結果,將計算與I/O分離,這樣還能充分利用多CPU。
  3. 分佈式應用分佈式

    高效利用並行IO
相關文章
相關標籤/搜索