https://blog.51cto.com/dapengtalk/1886579
你了解js的運作原理嗎?
js------解釋性語言,他的解釋器有多種,不同的浏覽器采用不同的js解釋器,
Chrome : webkit/blink : V8
FireFox: Gecko : SpiderMonkey
Safari : webkit : JavaScriptCore
IE : Trident : Chakra
node.js就是個不錯的東西,他能想到把js拿出來做服務端,那就要一個脫離與浏覽器的解釋器,是以他就選擇了這個v8解釋器
so,解釋性的語言是脫離不了解釋器的,so,你想拿js做服務端,你就必須要一個解釋器node,實際都是充當的虛拟機的功能
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
js和其他的解釋型語言有什麼不一樣呢?------單線程------我認為這種語言之間的單線程或者多線程本質上呢是這門語言的虛拟機的機制
Node.js 特點
1、單線程
一個線程,一個連結,在Java、PHP或者.net等伺服器端語言中,會為每一個用戶端連接配接建立一個新的線程。而每個線程需要耗費大約2MB記憶體。也就是說,理論上,一個8GB記憶體的伺服器可以同時連接配接的最大使用者數為4000個左右。要讓Web應用程式支援更多的使用者,就需要增加伺服器的數量,而Web應用程式的硬體成本當然就上升了。(多線程服務容易造成并發安全性的問題)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cssWNXpld1clWywWbjBjTzwEMW1mY1RzRapnTtxkb5ckYplTeMZTTINGMShUYfRHelRHLwEzX39GZhh2css2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3Pn5GcuEjM4MTO1kDM4EzMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
一個線程,多個連結,Node.js不為每個客戶連接配接建立一個新的線程,而僅僅使用一個線程。當有使用者連接配接了,就觸發一個内部事件,通過非阻塞I/O、事件驅動機制,讓Node.js程式宏觀上也是并行的。使用Node.js,一個8GB記憶體的伺服器,可以同時處理超過4萬使用者的連接配接。
另外,單線程帶來的好處,作業系統完全不再有線程建立、銷毀的時間開銷。
壞處,就是一個使用者造成了線程的崩潰,整個服務都崩潰了,其他人也崩潰了。
node的單線程是指服務的單線程,但io是多線程的,而其他的語言則是服務的多線程。。。。。。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
用js做服務端的解釋性語言,必須得了解node的運作原理,掌握js是如何運作的?在學一下api庫,第三方庫以及架構,一個node輕松搞定
js技術體系=各種硬體平台的node虛拟機+api子產品+第三方架構
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.node虛拟機,運作原理網上的不太好
2.api這裡看一下
node.js所有依賴項
Node.js 依賴于以下一些依賴項,這樣它才能正常工作。
- 類庫
- V8:v8類庫解析js,單線程模型
- libuv:異步io,io線程池
- http-parser
- c-ares
- OpenSSL
- zlib
- 工具
- npm:Node.js 完全是基于子產品化建構的,是以需要一個高品質的包管理器
- gyp
- gtest