首頁  >  文章  >  web前端  >  為什麼node能高並發

為什麼node能高並發

WBOY
WBOY原創
2022-04-22 14:45:213049瀏覽

因為node具有「事務驅動」和非同步「I/O」特性,是非阻塞非同步操作;針對每個並發請求,服務端給請求註冊一個激發事件,並給予一個回呼函數,按順序執行事件處理,處理完成後執行回呼函數,接著執行下一個事件處理,所以node能夠高並發。

為什麼node能高並發

本教學操作環境:windows10系統、nodejs 12.19.0版本、Dell G3電腦。

為什麼node能高並發

nodejs是非阻塞非同步操作。針對每個並發請求,服務端給予請求註冊一個激發事件(I/O),並給予一個回呼函數(這個過程沒有阻塞新的連線請求)。依序執行事件處理(I/O),處理完成後執行回呼函數,接著執行下一個事件處理(I/O)。

在解釋node為什麼能夠做到高並發之前,不妨先了解一下node的其他幾個特性:

單線程

我們先來明確一個概念,即:node是單線程的,這一點與JavaScript在瀏覽器中的特性相同,並且在node中JavaScript主線程與其他線程(例如I/O線程)是無法共享狀態的。

單一執行緒的好處就是:

  • #不需要像多執行緒一樣去關注執行緒之間的狀態同步問題

  • 沒有執行緒切換所帶來的開銷

  • 沒有死鎖存在

當然單執行緒也有許多壞處:

  • 無法充分利用多核心CPU

  • 大量運算佔用CPU會導致應用程式阻塞(即不適用CPU密集型)

  • 錯誤會引起整個應用的退出

異步I/O

你可能會問,既然node是單線程的,事件全部在一個線程上處理,那不是應該效率很低、與高並發相反嗎?

恰恰相反,node的效能很高。原因之一是node具有非同步I/O特性,每當有I/O請求發生時,node會提供給該請求一個I/O執行緒。然後node就不管這個I/O的操作過程了,而是繼續執行主執行緒上的事件,只需要在該請求返回回呼時在處理即可。也就是node省去了許多等待請求的時間。

這也是node支援高並發的重要原因之一

實際上不光是I/O操作,node的絕大多數操作都是以這種非同步的方式進行的。它就像是組織者,無需事必躬親,只需要告訴成員們如何正確的進行操作並接受反饋、處理關鍵步驟,就能使得整個團隊高效運作。

交易驅動

你可能又要問了,node怎麼知道請求回傳了回調,又應該何時去處理這些回調呢?

答案就是node的另一個特性:事務驅動,也就是主執行緒透過event loop事件循環觸發的方式來執行程式

這是node支援高並發的另一重要原因

為什麼node能高並發

推薦學習:《nodejs影片教學

以上是為什麼node能高並發的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn