javascript
nodeJS理解
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請求次數過多的問題。
轉載于:https://www.cnblogs.com/this-xiaoming/p/5845099.html
總結
- 上一篇: nginx 不带www到www域名的重定
- 下一篇: gradle idea java ssm