P01: 從實用角度出發的node.js學習教程

相關文章

node

隨着前端技術的不斷髮展,尤爲是近幾年前端工程化的普及,node.js也受到愈來愈多的關注以及使用。本系列文章將本身研究node中的總結體會一一呈現,水平有限若有錯誤還請指正嗎,萬分感謝。前端

官方文檔

什麼是node.js?

Node.js 是一個基於 Chrome V8 引擎的 JavaScript 的 runtimenode

  • 它是一個Javascript運行環境數據庫

  • 依賴於Chrome V8引擎進行代碼解釋前端工程化

  • 事件驅動api

  • 非阻塞I/Obash

  • 輕量、可伸縮,適於實時數據交互應用服務器

  • 單進程,單線程網絡

node.js 的優勢

  • 對於前端,有利於統一體驗
  • 高併發,IO密集 性能優越

    I/O密集與CPU密集的區別多線程

    • CPU密集: 加密解密,壓縮解壓等 => 運算操做密
    • I/O密集:文件操做,網絡操做,數據庫操做等 => 讀寫密集

node.js 的單線程

  • 單線程是針對系統主進程來講的,I/O操做交給底層系統多進程運行
  • node.js的單線程並非單進程內的單線程,能夠使用相關模塊調用多進程(每一個單核啓動一個),以此完成集羣。只要你須要,機器性能不會閒置

前置知識

  • 簡單瞭解阻塞I/O以及非阻塞I/O
    • 阻塞I/O : 同步 => 下一步須要等待上一步的結果返回
    • 非阻塞I/O: 異步 => 不依賴與上一步的結果直接執行下一步
  • 進程以及線程
    • 進程: 是計算機中的程序關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位 => 類比於模塊
      • 進程通常由程序,數據集合和進程控制塊三部分組成。
        • 程序用於描述進程要完成的功能,是控制進程執行的指令集;
        • 數據集合是程序在執行時所須要的數據和工做區;
        • 程序控制塊包含進程的描述信息和控制信息是進程存在的惟一標誌
      • 進程具備的特徵:
        • 動態性:進程是程序的一次執行過程,是臨時的,有生命期的,是動態產生,動態消亡的;
        • 併發性:任何進程均可以同其餘進行一塊兒併發執行;
        • 獨立性:進程是系統進行資源分配和調度的一個獨立單位;
        • 結構性:進程由程序,數據和進程控制塊三部分組成
      • 多進程: 同時運行多個進程 => 對於單核只能在同一時間點運行一個進程,多進程的實現粗略理解爲多個進程的快速切換,相似於逐幀動畫
    • 線程:程序執行流的最小單元,是處理器調度和分派的基本單位,是進程內一個相對獨立,可調用的執行單元,於同屬於一個進程的線程共享此進程的資源 => 類比於組件
      • 多線程: 用一個進程內同時運行多個線程
    • 進程與線程的區別
      1. 線程是程序執行的最小單位,而進程是操做系統分配資源的最小單位;
      2. 一個進程由一個或多個線程組成,線程是一個進程中代碼的不一樣執行路線
      3. 進程之間相互獨立,但同一進程下的各個線程之間共享程序的內存空間(包括代碼段,數據集,堆等)及一些進程級的資源(如打開文件和信號等),某進程內的線程在其餘進程不可見;
      4. 調度和切換:線程上下文切換比進程上下文切換要快得多
    • 擴展:爲什麼不使用多進程而是使用多線程?
      • 線程廉價,線程啓動比較快,退出比較快,對系統資源的衝擊也比較小。並且線程彼此分享了大部分核心對象(File Handle)的擁有權
      • 若是使用多重進程,可是不可預期,且測試困難

環境準備

  • 打開cmd
$ node -v
vx.x.x
複製代碼
  • 若是未輸出版本號
    • 下載node
    • 國內的各類全家桶已經鍛鍊了各位如何安裝軟件
    • 建議學習使用最新版,生產使用穩定版或跟隨公司版本
    • 安裝完畢再次執行命令行,獲得版本信息,即準備好node環境

node初體驗

// 建立文件demo.js
console.log('hello node')
// 執行文件
node demo.js
複製代碼

close併發

相關文章
相關標籤/搜索