第一節(jié): 認(rèn)識(shí)Node

1. 認(rèn)識(shí)node

1.1 什么是node

Node.js是一個(gè)基于 Chrome V8引擎的JavaScript 運(yùn)行環(huán)境,


1.2 Nodejs與JavaScript

首先了解JavaScript,JavaScript是前端腳本語(yǔ)言,運(yùn)行在瀏覽器中, JavaScript賦予了網(wǎng)頁(yè)新的生命力.

因此,我們知道了JavaScript是一門(mén)語(yǔ)言, 而瀏覽器是運(yùn)行JavaScript這門(mén)語(yǔ)言的環(huán)境

而Node也是一個(gè)運(yùn)行環(huán)境, 運(yùn)行JavaScript語(yǔ)言的.

其實(shí)node和JavaScript的關(guān)系就像 瀏覽器內(nèi)核中處理JS的引擎和JavaScript的關(guān)系.

簡(jiǎn)單的理解就是node不是一門(mén)語(yǔ)言,而是一個(gè)環(huán)境, 一個(gè)能讓JavaScript的運(yùn)行在后臺(tái)的環(huán)境環(huán)境,

Node其實(shí)就是使用chrome開(kāi)源的V8引擎為基礎(chǔ) 并添加了服務(wù)器語(yǔ)言應(yīng)該有的功能,如文件系統(tǒng),模塊,,操作系統(tǒng)API,網(wǎng)絡(luò)通信等而搭建的服務(wù)端運(yùn)行


總結(jié):

  1. NodeJS : 一個(gè)可以運(yùn)行JavaScript 的運(yùn)行環(huán)境(平臺(tái)),是基于Chrome JavaScript V8 引擎,并且對(duì)JavaScript語(yǔ)言進(jìn)行了增強(qiáng).使JavaScript具有服務(wù)器語(yǔ)言開(kāi)發(fā)的能力(操作文件,讀取系統(tǒng)信息,網(wǎng)絡(luò)等)

  2. JavaScript: 一門(mén)編程語(yǔ)言,只要有JavaScript引擎就能 運(yùn)行,每個(gè)瀏覽器都有自己的JS引擎,如果運(yùn)行在瀏覽器中,瀏覽器對(duì)JavaScript加入了瀏覽器和文檔操作的接口

簡(jiǎn)單理解: JavaScript運(yùn)行需要JavaScript引擎, JavaScript引擎可以在瀏覽器中(IE,Chrome,Firefox),也可以獨(dú)立出來(lái)(node),雖然都是JavaScript,但是在不同的運(yùn)行環(huán)境下,責(zé)任也不同,瀏覽器下的JavaScript 主要操作BOM,DOM ,而Node則具有服務(wù)端語(yǔ)言的功能(處理網(wǎng)絡(luò)請(qǐng)求,保存數(shù)據(jù)到數(shù)據(jù)庫(kù)中)


01-node簡(jiǎn)介.jpg


2. NodeJS的特點(diǎn)

作為后端JavaScript的運(yùn)行平臺(tái), Node保留了前端JavaScript中哪些屬性的接口,并沒(méi)有改變語(yǔ)言本身的任何特性, 依舊基于作用域和原型鏈.

Node的特點(diǎn):

  1. Non-blocking I/0 非阻塞異步I/O
  2. Event Driven 事件驅(qū)動(dòng)
  3. single Thread 單線程 ,

三個(gè)特點(diǎn)可以理解是相輔相成,
在低硬件條件下處理高并發(fā),必須選擇減少內(nèi)存消耗,所以選擇單線程,
為了防止線程阻塞,單線程就必須非阻塞異步 I/O,
為了非阻塞I/O 就必須處理異步調(diào)度問(wèn)題,所以事件驅(qū)動(dòng)
接下來(lái)好好看看這三個(gè)特點(diǎn).

創(chuàng)建node是為什么要選擇單線程,事件驅(qū)動(dòng),非阻塞I/O?
在傳統(tǒng)服務(wù)器模型中,大多都使用多線程來(lái)解決并發(fā)的問(wèn)題, 而每一個(gè)客戶端在連接創(chuàng)建一個(gè)線程,需要消耗2MB的內(nèi)存,也就是說(shuō),理論上一個(gè)8GB的服務(wù)器可以同時(shí)鏈接用戶數(shù)量為4000個(gè)左右

而Node.js 單線程,利用非阻塞IO,事件驅(qū)動(dòng),理論上一個(gè)8GB內(nèi)存的服務(wù)器,可以容納3萬(wàn)到4萬(wàn)的用戶連接


2.1.NodeJS 單線程

Node保持了JavaScript單線程的特點(diǎn). 單線程最大的好處是不用像多線程編程那樣處處在意狀態(tài)的同步問(wèn)題, 也沒(méi)有死鎖的存在.也沒(méi)有線程上下文交換帶來(lái)的性能開(kāi)銷.

單線程.png

但是單線程也有其弱點(diǎn):

  1. 無(wú)法利用多核CPU
  2. 錯(cuò)誤會(huì)引起整個(gè)應(yīng)用退出, 應(yīng)用的健壯性值得考慮
  3. 大量的計(jì)算占用CPU


2.2. 非阻塞異步I/ O

Node.js采用了非阻塞異步I/O機(jī)制,當(dāng)某個(gè)I/O執(zhí)行完畢時(shí),將以事件/回調(diào)函數(shù)的形式通知執(zhí)行操作后的結(jié)果
非阻塞模式下,一個(gè)線程用用在執(zhí)行計(jì)算操作,這個(gè)線程CPU核心利用率永遠(yuǎn)是100%

例如:讀取文件操作


34b35a066f12d8550907f233c2f09a3.jpg

Node 適合I/O操作比較多的服務(wù)器, 不適合計(jì)算比較多的.


2.3. 事件驅(qū)動(dòng)模型

Node將前端瀏覽器中應(yīng)用廣泛且成熟的事件引入后端, 配合異步I/O, 將事件點(diǎn)暴露給業(yè)務(wù)邏輯

NodeJS單線程只是一個(gè)JS主線程,本質(zhì)上的異步操作還是有線程池完成的

NodeJS之所以單線程處理高并發(fā)的原因,得益于c++的異步框架libuv層來(lái)實(shí)現(xiàn)的,循環(huán)機(jī)制,和底層的線程池

而Node.js的高性能也是得益于其將阻塞的I/O異步化,使得不影響主邏輯的執(zhí)行

事件驅(qū)動(dòng)模型.jpeg


3. 安裝運(yùn)行

官網(wǎng)下載安裝運(yùn)行

3.1 檢查有沒(méi)有安裝成功
$ node -v
$ npm -v


3.2 運(yùn)行模式
  1. REPL模式(Read-Evaluate-Print-Loop) 輸入- 求值 - 輸出 - 循環(huán)
$ node

node 回車直接進(jìn)入REPL模式(了解即可)

  1. 直接運(yùn)行js文件
$ node index.js


3.3 常用DOS命令
  1. e: 切換盤(pán)符
  2. dir 顯示當(dāng)前文件夾中所有文件及文件夾列表
  3. cd 進(jìn)入文件夾(../上一層文件夾)
  4. exit 退出命令行
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容