nodejs是一個基於Chrome V8 引擎的JS運行環境,也就是讓javascript運行在服務器(server)端, NodeJS使用了一個事件驅動,非阻塞式的I/O模型,使得其輕量又高效。 Nodejs包管理器npm是全球最大的開源生態系統。
nodejs是服務端的js平台。
npm grunt express 等強大的代碼與項目管理應用在nodeJS上。
####關於NodeJS與傳統服務器處理平台(Apache)的區別
#####Apache的多線程高並發模式 Apache是一種多線程處理並發,但是在一些大型的web應用上也會發生阻塞。
#####線程和進程 線程是可以獨立運行的最小的CPU單位。 線程可以在同一個進程中並發運行,並共享該進程下的內存地址空間。
進程可以支持多個線程,它們看似同時執行,但是相互之間並不同步。 一個進程中的多個線程共享相同的內存地址空間,意味着可以訪問相同的變量和對象,並且從同一堆中分配對象。
這樣讓線程之間共享信息變得容易,但是也要確保他們不會妨礙同一進程中想的其他線程。
#####NodeJS的異步I/O原理 用數據庫的調用舉例:
Apache,執行到第一個線程的時候會等待query返回結果,一方面會導致線程長期阻塞等待,另一方面會為了新請求不斷增加線程,會浪費大量的資源,同時線程增加會占用大量的CPU時間來處理內存上下文切換。
NodeJS是異步單線程的,應用的是異步回調的方法,也就是異步的I/O。 解釋:當進程執行的時候,不會等待結果的返回,而是直接執行下面的語句,直到進入事件循環,當數據庫執行返回結果的時候會將事件發送到事件隊列,等線程進入事件循環之后才會調用之前的回調函數。 也就是nodejs的工作原理其實就是事件循環。每一條nodejs的邏輯都是寫在回調函數里面的,而回調函數都是返回之后才異步執行的。
NodeJS也會發生阻塞,但是阻塞發生在自己的單個線程當中,不是發生在后續回調的流程當中。
#####與php區別 用node來做網站開應用的是分塊加載的模式,不用像php那樣把所有的數據一次性加載到客戶端。
NodeJS相比於php和Apache開的新線程來講,節省了CPU內存和上下文切換的時間。
####NodeJS的應用場景 NodeJs適合應用在具有大量的細小的http請求環境下,例如web的即時聊天程序,或者上萬人同時在線的游戲服務器。不用考慮http請求次數過多的問題。
