Nodejs中的事件輪詢和異步IO


Nodejs的官方釋義:

一個搭建在Chrome JavaScript運行時上的平台,用於構建高速、可伸縮的網絡程序。Node.js采用的事件驅動、非阻塞I/O模型,使它
既輕量又高效,並成為構建運行在分布式設備上的數據密集型實時程序的完美選擇。

獲取幾組標簽:基於Chrome JS引擎、可伸縮、事件驅動(事件輪詢)、非阻塞I/O(異步I/O)、輕量、分布式、數據密集、實時......

今天聊聊事件輪詢和非阻塞I/O

 

我們來看一小段jQuery用XMLHttpRequest(XHR)做Ajax請求的代碼:

這個程序會發送一個到resource.json的HTTP請求。當響應返回時會調用帶着參數 data 的匿名函數(在這個上下文中的“回調函數”), data 就是從那個請求中得到的數據。

注意,代碼沒有寫成下面這樣:

在這個例子中,假定對resource.json的響應在准備好后會存儲在變量 data 中,並且在此之前函數 console.log 不會執行。I/O操作(Ajax請求)會“阻塞”腳本繼續執行,直到數據准備好。因為瀏覽器是單線程的,如果這個請求用了400ms才返回,那么頁面上的其他任何事件都要等到那之后才能執行。可以想象一下,如果一幅動畫被停住了,或者用戶試着跟頁面交互時動不了,那種用戶體驗有多糟糕。

 

在Nodejs中,當瀏覽器中有I/O操作時,該操作會在事件輪詢的外面執行(腳本執行的主順序之外),然后當這個I/O操作完成時,它會發出一個“事件”,會有一個函數(通常稱作“回調”)處理它。
這個I/O是異步的,並且不會“阻塞”腳本執行,事件輪詢仍然可以響應頁面上執行的其他交互或請求。這樣,瀏覽器可以對客戶做出響應,並且可以處理頁面上的很多交互動作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM