深刻淺出node(1) Node簡介

這一系列主要是本身在學習深刻淺出node.js這本書的學習筆試,部分加入了本身的一些理解 分享給一塊兒學習node的小夥伴 本身仍是個初學者 有不少地方理解的不到位 一塊兒交流javascript

  一 什麼是nodejava

    1.1 對比node chromenode

  二 node的特色web

    2.1 異步I/Ochrome

    2.2 事件驅動編程

    2.3 單線程後端

  三 node的使用場景    promise

 一)什麼是node瀏覽器

  node是一種單線程,單進程的系統,它具備事件驅動,非阻塞I/O的特性,經過node這個基礎框架咱們能實現多種應用(web服務器 桌面應用 命令行工具等) node在實現上將chrome的V8引擎移動到後端,充分利用的V8的事件驅動,來構造應用.服務器

  1.1 對比node chrome  在瀏覽器中中經過事件驅動服務界面  在node經過事件驅動服務I/O

二)node的特色  

  2.1 異步I/O 異步是對比同步來理解的,而且在實現異步I/O的基礎上是結合事件驅動來實現的 簡單的圖理解事件驅動

簡單的理解異步I/O 就是咱們沒必要關注請求完成的時間,發起調用後會自動的執行後面的調用,事件監聽器會調用設置的回調函數(存在數據的話,會做爲參數傳入),來達到異步I/O

這就涉及到 完成A B 任務的問題  假設A B任務不相關  在同步的模式下   任務完成的時間取決於 time(A) + time(B)  在異步的模式下   任務完成的時間取決於 max(time(A),time(B)) 這樣任務不只能並行的處理,也存在提高效率的可能.

  2.2 事件驅動

    事件驅動的編程模型具備輕量級,鬆耦合,只關注業務點等優點,但在多個異步任務的場景下下,事件與事件之間如何協同合做(回調的嵌套)是一個問題(promise)

  2.3 單線程? 

    在瀏覽器中javascript和用戶界面的UI是共享一個線程的,也就是當js長時間的執行的時候,頁面會被鎖死,在node中也保持了js單線程這個特色,其實這個單線程的概念能夠理解爲不管是瀏覽器仍是node中只存在一個主線程,在主線程運行的事件循環的邏輯,事件監聽器,在瀏覽器中咱們能夠經過web workers來經過事件與主線程通訊,在node中能夠經過child_process來與主線程通訊

單線程存在着下面的幾個問題

  • 沒法利用多核CPU
  • 錯誤會引起整個應用退出,應用的健壯性考慮(作好錯誤的處理)
  • 大量的計算佔用CPU致使沒法繼續調用異步I/O(瀏覽器中js長期執行鎖死頁面)

三) node的使用場景

  經過上面的分析node很是的適合I/O密集型的應用,可是V8引擎的性能也是不錯的,它在CPU密集型的應用上的表現也是不錯的,咱們能夠將CPU密集任務分配給子線程進行計算,或者對任務進行切分(將大塊的任務切分紅小的任務防止對CPU的長期佔用 一個任務若是長期的佔用CPU咱們就要考慮他的場景了),也就是像書中寫的CPU密集型任務並不可怕,合理的調度纔是關鍵

相關文章
相關標籤/搜索