1. 程式人生 > >深入淺出node.js:1 Node簡介

深入淺出node.js:1 Node簡介

    瀏覽器端JavaScript在Web應用中盛行,甚至讓人們忘掉了JavaScript可以在伺服器端執行這事。

    Node的本意是提供一個高效能的面向網路的執行平臺。

1.1 Node的誕生歷程

   2009年3月:Ryan Dahl在其部落格上宣佈準備基於V8建立一個輕量級的Web伺服器並提供一個套庫。

1.2 Node的命名與起源

   http://nodejs.org

   Ryan Dahl找到了設計高效能,Web伺服器的幾個要點:事件驅動、非阻塞I/O。大多數人不設計一種更簡單和更有效率的程式的主要原因是他們用到了阻塞I/O的庫。

   Node發展為一個強制不共享任何資源的單執行緒、單程序系統,包含十分適宜網路的庫,為構建大型分散式應用程式提供基礎設施,其目標也是成為一個構建快速、可伸縮的網路應用平臺。它自身非常簡單,通過通訊協議來組織許多Node,非常容易通過擴充套件來達成構建大型網路應用的目的。每個Node程序都構成這個網路應用中的一個節點,這是它名字所含意義的真諦。


1.4 Node的特點

    依舊基於作用域和原形鏈,區別在於它將前端中廣泛運用的思想遷移到了伺服器端。

    1、非同步IO:絕大多數的操作都以非同步的方式進行呼叫。可用從語言層面進行並行I/O操作


      2、事件與回撥函式:

      3、單執行緒:沒有死鎖,也沒有上下文交換所帶來的效能開銷。

            弱點:無法利用多核CPU,錯誤會引起整個應用退出,大量計算佔用CPU導致無法繼續呼叫非同步IO

            解決辦法:與Web Workers的思路相同,通過Master-Worker的管理方式。

       4、跨平臺:

1.5 Node的應用場景

    IO密集型:利用Node的事件迴圈處理能力,而不是啟動每個執行緒為每個請求服務,資源佔用極少。

    CPU密集型:雖然沒有提供多執行緒用於計算支援,但還是有以下兩個方式來充分利用CPU

  • 通過編寫C/C++擴充套件的方式
  • 通過子程序,利用程序間的訊息來傳遞結果,將計算與I/O分離,這樣還能充分利用多CPU

    與傳統系統和平共處

    分散式應用:

1.6 Node的使用者