Node.js簡(jiǎn)介

Node.js不是一門新的編程語言,是基于Chrome JavaScript運(yùn)行時(shí)建立的一個(gè)平臺(tái),使用C++編寫的,是對(duì)Google Chrome V8引擎進(jìn)行了封裝,它主要用于創(chuàng)建快速的、可擴(kuò)展的網(wǎng)絡(luò)應(yīng)用.Node.js使用非阻塞的,事件驅(qū)動(dòng)的 I/O 操作來保持在處理跨平臺(tái) (across distributed devices) 數(shù)據(jù)密集型實(shí)時(shí)應(yīng)用時(shí)的輕巧高效.

基礎(chǔ)知識(shí)

Node.js 是谷歌 V8 引擎、libuv平臺(tái)抽象層 以及主體使用 Javscript 編寫的核心庫三者集合的一個(gè)包裝外殼.

Node.js內(nèi)部結(jié)構(gòu):


Node.js.png

頂層是API調(diào)用,就是開發(fā)中產(chǎn)生的業(yè)務(wù)代碼;
中間層將JavaScript與底層執(zhí)行之間做了綁定操作;
底層的V8是Google 開源的高性能 JavaScript 引擎,它將 JavaScript 代碼轉(zhuǎn)換成機(jī)器碼,然后執(zhí)行,因此速度非???V8 以 C++ 語言開發(fā),Google 的 Chrome 瀏覽器正是使用的 V8 引擎.

libuv通過C 語言開發(fā),內(nèi)部管理著一個(gè)線程池。在此基礎(chǔ)之上,提供事件循環(huán)(Event Loop)、異步網(wǎng)絡(luò) I/O、文件系統(tǒng) I/O等能力.

其他底層依賴庫c-ares、crypto (OpenSSL)、http-parser 以及 zlib,這些依賴提供了對(duì)系統(tǒng)底層功能的訪問,包括網(wǎng)絡(luò)、壓縮、加密等.

事件循環(huán)

Node.js 包含一個(gè)事件循環(huán),Node.js中所有的邏輯都是事件的回調(diào)函數(shù),Node.js始終在事件循環(huán)中,程序入口就是事件循環(huán)第一個(gè)事件的回調(diào)函數(shù).事件的回調(diào)函數(shù)中可能會(huì)發(fā)出I/O請(qǐng)求或直接發(fā)射( emit)事件,執(zhí)行完畢后返回事件循環(huán).事件循環(huán)會(huì)檢查事件隊(duì)列中有沒有未處理的事件,直到程序結(jié)束.Node.js的事件循環(huán)對(duì)開發(fā)者不可見,由libuv庫實(shí)現(xiàn),libuv不斷檢查是否有活動(dòng)的、可供檢測(cè)的事件監(jiān)聽器,直到檢查不到時(shí)才退出事件循環(huán),程序結(jié)束.

EventLoop.png

適用場(chǎng)景

1.RESTful API
這是適合 Node 的理想情況,因?yàn)槟梢詷?gòu)建它來處理數(shù)萬條連接。它仍然不需要大量邏輯;它本質(zhì)上只是從某個(gè)數(shù)據(jù)庫中查找一些值并將它們組成一個(gè)響應(yīng)。由于響應(yīng)是少量文本,入站請(qǐng)求也是少量的文本,因此流量不高,一臺(tái)機(jī)器甚至也可以處理最繁忙的公司的 API 需求.

2.實(shí)時(shí)程序
聊天應(yīng)用程序是最能體現(xiàn) Node.js 優(yōu)點(diǎn)的例子:輕量級(jí)、高流量并且能良好的應(yīng)對(duì)跨平臺(tái)設(shè)備上運(yùn)行密集型數(shù)據(jù)(雖然計(jì)算能力低)。同時(shí),聊天也是一個(gè)非常值得學(xué)習(xí)的用例,因?yàn)樗芎?jiǎn)單,并且涵蓋了目前為止一個(gè)典型的 Node.js 會(huì)用到的大部分解決方案.

3.單頁APP
ajax很多?,F(xiàn)在單頁的機(jī)制似乎很流行,比如phonegap做出來的APP,一個(gè)頁面包打天下的例子比比皆是。

Node.js不會(huì)發(fā)生死鎖,因?yàn)镹ode.js是單線程,避免了頻繁的線程切換開銷,沒有鎖,支持異步I/O讀取密集型的操作,不適合CPU運(yùn)算密集型的操作,否則出現(xiàn)以下狀態(tài),計(jì)算時(shí)間過長(zhǎng),導(dǎo)致整個(gè)程序陷入了假死狀態(tài).

0304004.png

參考鏈接
Node.js 究竟是什么?
Node.js軟肋之CPU密集型任務(wù)
Node.js機(jī)制及原理理解初步

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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