首頁  >  文章  >  web前端  >  node的非同步機制是基於什麼

node的非同步機制是基於什麼

青灯夜游
青灯夜游原創
2022-07-11 19:18:271579瀏覽

node的非同步機制是基於「事件」的,所有的I/O、網路通訊、資料庫查詢都以非阻塞的方式執行,回傳結果由事件循環來處理。 Node在同一時刻只會處理一個事件,完成後立即進入事件循環檢查後面事件。這樣CPU和內存在同一時間集中處理一件事,同時盡量讓耗時的I/O等操作並行執行。

node的非同步機制是基於什麼

本教學操作環境:windows7系統、nodejs16版,DELL G3電腦。

NodeJS是單線程,單一線程有以下好處:

  • #簡單

  • 高效能,避免了頻繁的線程切換開銷

  • 佔用資源小,因為是單線程,在大負載情況下,對記憶體佔用仍然很低

  • 線程安全,沒有加鎖、解鎖、死鎖這些問題

如何解決高並發?

node使用非同步IO和事件驅動(回呼函數)來解決高並發這個問題。

一般來說,高並發解決方案會提供多線程模型,為每個業務邏輯提供一個線程,透過系統線程切換來彌補同步I/O呼叫的時間開銷。像apache,是一個請求一個執行緒。

而NodeJS使用的是單執行緒模型,對所有I/O都採用非同步的請求方式,避免頻繁的上下文切換,在NodeJS執行的時候維護一個事件佇列;程式在執行時進入事件循環等待下一個事件到來,每個非同步I/O請求完成後都會被推送到事件佇列中的等待執行。

NodeJS的非同步機制是基於事件的,所有的I/O、網路通訊、資料庫查詢都以非阻塞的方式執行,回傳結果由事件循環來處理。如圖:

node的非同步機制是基於什麼

Node.js 進程在同一時刻只會處理一個事件,完成後立即進入事件循環檢查後面事件。這樣做的好處是,CPU和內存在同一時間集中處理一件事,同時盡量讓耗時的I/O等操作並行執行。對於低速連線攻擊,Node.js只是在事件佇列中增加請求,等待作業系統的回應,因而不會有任何多執行緒開銷,很大程度上可以提高 Web 應用的健全性,防止惡意攻擊。

事件循環機制

所謂事件循環是指NodeJS會把所有的非同步操作使用事件機制解決,有個執行緒不斷地循環偵測事件佇列。

NodeJS中所有的邏輯都是事件的回呼函數,所以NodeJS總是在事件循環中,程式入口就是事件循環第一個事件的回呼函數。事件的回呼函數中可能會發出I/O請求或直接發射( emit)事件,執行完畢後返回事件循環。事件循環會檢查事件佇列中有沒有未處理的事件,直到程式結束。 NodeJS的事件循環對開發者不可見,由libev函式庫實現,libev不斷檢查是否有活動的、可供偵測的事件監聽器,直到檢查不到時才退出事件循環,程式結束。

node的非同步機制是基於什麼

更多node相關知識,請造訪:nodejs 教學

以上是node的非同步機制是基於什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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