Node.js 中的 Event loop

xieshuning發表於2018-04-07

一、Node.js 中的 Event loop:

Node.js

  1. V8 引擎解析 JavaScript 指令碼;
  2. 程式碼中可能會呼叫 Node API,Node 會交給 LIBUV 庫處理
  3. LIBUV 庫負責 Node API 的執行。它將不同的任務分配給不同的執行緒,形成一個 Event Loop(事件迴圈),以非同步的方式將任務的執行結果返回給 V8 引擎;
  4. 通過事件驅動的方式,將結果放到事件佇列中,最終交給我們的應用。

二、當 Node.js 啟動時會初始化事件迴圈,處理輸入指令碼呼叫非同步 API ,定時器,或呼叫 process.nextTick(),然後開始處理事件迴圈。

順序

  1. timers 階段: 這個階段執行 setTimeout() 和 setInterval() 的回撥;
  2. I/O callbacks 階段,執行除了 close 事件的回撥和timers 的回撥之外的回撥;
  3. idle, prepare 階段,僅 Node 內部使用;
  4. poll 階段,獲取新的 I/O 事件, 適當的條件下 node 將阻塞在這裡;
  5. check 階段,執行setImmediate() 設定的回撥;
  6. close callbacks 階段,比如 socket.on() 的回撥會在這個階段執行。

PS : 未完待續,以上只是自己的一些淺顯的理解,如有問題,還請指正。^ _ ^

相關文章