事件驅動模型

在Node.js中有一個事件隊列,每一個任務都會放入事件隊列中,都會留下處理結果的回調函數(事件循環線程處理事件隊列中的任務,直到回調函數再也不存在。);html

無阻塞的狀況下,做爲一個帶有回調的函數被放入事件隊列中,事件循環線程中被提取並執行;node

遇到I/O阻塞(讀取文件、查詢數據庫、請求套接字、訪問遠程服務等)時,事件循環線程不會停下等待結果,轉而繼續執行隊列中的下一個任務,不會在事件循環線程中執行。web

Node.Js使用事件驅動模型,當web server接收到請求,就把它關閉而後進行處理,而後去服務下一個web請求。當這個請求完成,它被放回處理隊列,當到達隊列開頭,這個結果被返回給用戶。這個模型很是高效可擴展性很是強,由於webserver一直接受請求而不等待任何讀寫操做。(這也被稱之爲非阻塞式IO或者事件驅動IO)數據庫

 

1,你用瀏覽器訪問nodejs服務器上的"/about.html"瀏覽器

2,nodejs服務器接收到你的請求,調用一個函數從磁盤上讀取這個文件。服務器

3,這段時間,nodejs webserver在服務後續的web請求。函數

4,當文件讀取完畢,有一個回調函數被插入到nodejs的服務隊列中。線程

5,nodejs webserver運行這個函數,實際上就是渲染(render)了about.html頁面返回給你的瀏覽器。rest

 

http://code.danyork.com/2011/01/25/node-js-doctors-offices-and-fast-food-restaurants-understanding-event-driven-programming/code

相關文章
相關標籤/搜索