1. 程式人生 > >【Node.js學習筆記】-00 Node.js簡介

【Node.js學習筆記】-00 Node.js簡介

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是單執行緒是因為接受任務的時候是單執行緒的,不需要程序/執行緒切換上下文的成本,很高效。但在執行具體的任務時是多執行緒的——單接多處