【Node.js學習筆記】-00 Node.js簡介
阿新 • • 發佈:2019-02-13
1.什麼是Node.js?
- Node.js不是JS應用,不是語言,也不是框架,只是JS的執行環境
- 事件驅動,非阻塞I/O,簡單說就是每個函式都是非同步的,Node.js內部隱藏了非阻塞I/O的具體細節,使得我們可以輕鬆編寫高效能的WEB應用,所以它是輕量且高效的
- 使用npm作為包管理器
2.基本原理
下圖為Node.js早期的架構圖。此圖簡要介紹了Node.js 是基於Chrome V8引擎構建的,由事件迴圈(Event Loop) 分發I/O任務,最終工作執行緒(Work Thread) 將任務丟到執行緒池(Thread Pool)裡去執行,而事件迴圈只需要等待執行結果就可以了。
梳理思路:
- Chrome V8是JavaScript引擎
- Node.js內建Chrome V8引擎,故而Node.js使用JavaScript語法
- JavaScript語言最大的特點就是單執行緒,也就意味著同時只能做一件事——“專一”
- 單執行緒就意味著所有任務需要排隊,前一個任務結束才能執行後一個任務,如果前一個任務耗時很長,後一個任務就只能在那傻等著
- 排隊有兩種情況導致:1)因為計算量大,CPU忙不過來——情有可原
- 2)CPU閒著,因為I/O很慢,不得不等著出結果出來了再往下執行——浪費青春
- 將等待中的I/O任務放到事件迴圈(Event Loop)裡
- 由事件迴圈(Event Loop)將I/O任務放到執行緒池中
- 只要有資源就盡力執行
在解決併發的問題上,非同步是最好的解決方案,這就好比是排隊和叫號機
- 排隊:在排隊的時候,什麼也幹不了只能等
- 叫號機:先取號,等輪到你的時候系統會通知你(Don't call me, I will call you),在這中間,你可以做任何想做的事
對比Node.js 來看:
取號——寫程式碼
叫號機——Event Loop
櫃員——執行緒池(Thread Pool)
說Node.js是單執行緒是因為接受任務的時候是單執行緒的,不需要程序/執行緒切換上下文的成本,很高效。但在執行具體的任務時是多執行緒的——單接多處