這篇“node的異步機制是什么”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“node的異步機制是什么”文章吧。
創(chuàng)新互聯(lián)服務項目包括高港網(wǎng)站建設、高港網(wǎng)站制作、高港網(wǎng)頁制作以及高港網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,高港網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到高港省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
node的異步機制是基于“事件”的,所有的I/O、網(wǎng)絡通信、數(shù)據(jù)庫查詢都以非阻塞的方式執(zhí)行,返回結(jié)果由事件循環(huán)來處理。Node在同一時刻只會處理一個事件,完成后立即進入事件循環(huán)檢查后面事件。這樣CPU和內(nèi)存在同一時間集中處理一件事,同時盡量讓耗時的I/O等操作并行執(zhí)行。
本教程操作環(huán)境:windows7系統(tǒng)、nodejs16版,DELL G3電腦。
NodeJS是單線程,單線程有以下好處:
簡單
高性能,避免了頻繁的線程切換開銷
占用資源小,因為是單線程,在大負荷情況下,對內(nèi)存占用仍然很低
線程安全,沒有加鎖、解鎖、死鎖這些問題
如何解決高并發(fā)?
node使用異步IO和事件驅(qū)動(回調(diào)函數(shù))來解決高并發(fā)這個問題。
一般來說,高并發(fā)解決方案會提供多線程模型,為每個業(yè)務邏輯提供一個線程,通過系統(tǒng)線程切換來來彌補同步I/O調(diào)用的時間開銷。像apache,是一個請求一個線程。
而NodeJS使用的是單線程模型,對所有I/O都采用異步的請求方式,避免頻繁的上下文切換,在NodeJS執(zhí)行的時候維護著一個事件隊列;程序在執(zhí)行時進入事件循環(huán)等待下一個事件到來,每個異步I/O請求完成后都會被推送到事件隊列中的等待執(zhí)行。
NodeJS的異步機制是基于事件的,所有的I/O、網(wǎng)絡通信、數(shù)據(jù)庫查詢都以非阻塞的方式執(zhí)行,返回結(jié)果由事件循環(huán)來處理。如圖:
Node.js 進程在同一時刻只會處理一個事件,完成后立即進入事件循環(huán)檢查后面事件。這樣做的好處是,CPU和內(nèi)存在同一時間集中處理一件事,同時盡量讓耗時的I/O等操作并行執(zhí)行。對于低速連接攻擊,Node.js只是在事件隊列中增加請求,等待操作系統(tǒng)的回應,因而不會有任何多線程開銷,很大程度上可以提高 Web 應用的健壯性,防止惡意攻擊。
事件循環(huán)機制
所謂事件循環(huán)是指NodeJS會把所有的異步操作使用事件機制解決,有個線程在不斷地循環(huán)檢測事件隊列。
NodeJS中所有的邏輯都是事件的回調(diào)函數(shù),所以NodeJS始終在事件循環(huán)中,程序入口就是事件循環(huán)第一個事件的回調(diào)函數(shù)。事件的回調(diào)函數(shù)中可能會發(fā)出I/O請求或直接發(fā)射( emit)事件,執(zhí)行完畢后返回事件循環(huán)。事件循環(huán)會檢查事件隊列中有沒有未處理的事件,直到程序結(jié)束。NodeJS的事件循環(huán)對開發(fā)者不可見,由libev庫實現(xiàn),libev不斷檢查是否有活動的、可供檢測的事件監(jiān)聽器,直到檢查不到時才退出事件循環(huán),程序結(jié)束。
以上就是關于“node的異步機制是什么”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關的知識內(nèi)容,請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。