Node.js 在瀏覽器外運行 V8 JavaScript 引擎(Google Chrome 的內核)
Node.js 應用程序運行於單個進程中,無需為每個請求創建新的線程。 Node.js 在其標准庫中提供了一組異步的 I/O 原生功能(用以防止 JavaScript 代碼被阻塞),並且 Node.js 中的庫通常是使用非阻塞的范式編寫的(從而使阻塞行為成為例外而不是規范)。
當 Node.js 執行 I/O 操作時(例如從網絡讀取、訪問數據庫或文件系統),Node.js 會在響應返回時恢復操作,而不是阻塞線程並浪費 CPU 循環等待。
這使 Node.js 可以在一台服務器上處理數千個並發連接,而無需引入管理線程並發的負擔(這可能是重大 bug 的來源)。
Node.js 具有獨特的優勢,因為為瀏覽器編寫 JavaScript 的數百萬前端開發者現在除了客戶端代碼之外還可以編寫服務器端代碼,而無需學習完全不同的語言。
上面這是官網的介紹
下面來分析一下java服務器和nodejs服務器的優劣勢,傳統的web服務流程可以分為客戶端<<--->>服務器<<-->>數據庫,把客戶端當成客人,把服務器當成餐廳的服務員,把數據庫當成后廚
第一種情況:假如客人點餐都很快
java服務器,他的服務員是一對一服務的,不會去服務別人,假如餐廳有1000個服務員,正好來了1000位客人,會有1000個服務員(也就是1000個線程)來專門接待每一個客人,但是假如超過1000個客人,服務器就會崩,所以只能去增加餐廳的面積和服務員的數量,在真實情況中,就是需要正價服務器的容量,或者服務器矩陣和集群,就需要花很多錢。成本比較大,適合有資本的大廠
node服務器,他就只有一個服務員(也就是單線程)假如餐廳來了同時1000位客人,他會把第一個客人的菜告訴后廚,把第一個回調函數留在后廚,第二個、第三個。。。以此類推,他不需要在后廚等,要是菜做好了,廚師點一下回調他就很快會去拿菜。他可以繼續給其他客人點菜,啥都不影響。回調天生適合處理高並發,所以配置低照樣也沒問題,成本低。
第二種情況:假如客人點餐都很慢(cpu密集型,大量復雜運算)
java服務器,他的服務員是一對一服務的,每個客人都需要5分鍾才能點菜,就算來了同時1000個人,因為每個人都有自己對應的服務員,所以花費的時間相當於還是5分鍾;不管有多少人,每個人的菜都能算的清清楚楚。這就是java的優勢。
node服務器,因為只有一個服務員,假如有同時1000人,每個客人都需要5分鍾才能點菜,那么就相當於在每個客人那都要花費5分鍾,這個就是差別,所以node不適合cpu密集型,不太適合大量復雜運算的程序,這也是node的劣勢