相關文章
node
隨着前端技術的不斷髮展,尤爲是近幾年前端工程化的普及,node.js也受到愈來愈多的關注以及使用。本系列文章將本身研究node中的總結體會一一呈現,水平有限若有錯誤還請指正嗎,萬分感謝。前端
官方文檔
什麼是node.js?
Node.js 是一個基於 Chrome V8 引擎的 JavaScript 的 runtimenode
node.js 的優勢
- 對於前端,有利於統一體驗
- 高併發,IO密集 性能優越
I/O密集與CPU密集的區別多線程
- CPU密集: 加密解密,壓縮解壓等 => 運算操做密
- I/O密集:文件操做,網絡操做,數據庫操做等 => 讀寫密集
node.js 的單線程
- 單線程是針對系統主進程來講的,I/O操做交給底層系統多進程運行
- node.js的單線程並非單進程內的單線程,能夠使用相關模塊調用多進程(每一個單核啓動一個),以此完成集羣。只要你須要,機器性能不會閒置
前置知識
- 簡單瞭解阻塞I/O以及非阻塞I/O
- 阻塞I/O : 同步 => 下一步須要等待上一步的結果返回
- 非阻塞I/O: 異步 => 不依賴與上一步的結果直接執行下一步
- 進程以及線程
- 進程: 是計算機中的程序關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位 => 類比於模塊
- 進程通常由程序,數據集合和進程控制塊三部分組成。
- 程序用於描述進程要完成的功能,是控制進程執行的指令集;
- 數據集合是程序在執行時所須要的數據和工做區;
- 程序控制塊包含進程的描述信息和控制信息是進程存在的惟一標誌
- 進程具備的特徵:
- 動態性:進程是程序的一次執行過程,是臨時的,有生命期的,是動態產生,動態消亡的;
- 併發性:任何進程均可以同其餘進行一塊兒併發執行;
- 獨立性:進程是系統進行資源分配和調度的一個獨立單位;
- 結構性:進程由程序,數據和進程控制塊三部分組成
- 多進程: 同時運行多個進程 => 對於單核只能在同一時間點運行一個進程,多進程的實現粗略理解爲多個進程的快速切換,相似於逐幀動畫
- 線程:程序執行流的最小單元,是處理器調度和分派的基本單位,是進程內一個相對獨立,可調用的執行單元,於同屬於一個進程的線程共享此進程的資源 => 類比於組件
- 進程與線程的區別
- 線程是程序執行的最小單位,而進程是操做系統分配資源的最小單位;
- 一個進程由一個或多個線程組成,線程是一個進程中代碼的不一樣執行路線
- 進程之間相互獨立,但同一進程下的各個線程之間共享程序的內存空間(包括代碼段,數據集,堆等)及一些進程級的資源(如打開文件和信號等),某進程內的線程在其餘進程不可見;
- 調度和切換:線程上下文切換比進程上下文切換要快得多
- 擴展:爲什麼不使用多進程而是使用多線程?
- 線程廉價,線程啓動比較快,退出比較快,對系統資源的衝擊也比較小。並且線程彼此分享了大部分核心對象(File Handle)的擁有權
- 若是使用多重進程,可是不可預期,且測試困難
環境準備
$ node -v
vx.x.x
複製代碼
- 若是未輸出版本號
- 下載node
- 國內的各類全家桶已經鍛鍊了各位如何安裝軟件
- 建議學習使用最新版,生產使用穩定版或跟隨公司版本
- 安裝完畢再次執行命令行,獲得版本信息,即準備好node環境
node初體驗
// 建立文件demo.js
console.log('hello node')
// 執行文件
node demo.js
複製代碼
close併發