Nodejs中的事件輪詢和異步IO

Nodejs的官方釋義:json

一個搭建在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是異步的,而且不會「阻塞」腳本執行,事件輪詢仍然能夠響應頁面上執行的其餘交互或請求。這樣,瀏覽器能夠對客戶作出響應,而且能夠處理頁面上的不少交互動做。spa

相關文章
相關標籤/搜索