Node.js中的事件循環

以前總結過瀏覽器中的事件循環,在 Node.js 中也有本身的事件循環,但與瀏覽器不同,在 Node.js 中有 5 個宏任務隊列,分別是:瀏覽器

  1. 計時器隊列,裏面存放 setTimeout 和 setInterval 函數添加的回調
  2. 系統相關回調隊列,例如端口監聽、進程資源佔用
  3. IO 事件隊列,裏面存放 I/O 事件回調,這是 Node.js 異步非阻塞的關鍵
  4. 當即執行隊列,裏面存放 setImmediate 函數添加的回調
  5. 關閉操做隊列,裏面存放 close 事件處理回調

除了上面 5 個宏任務隊列,還有 2 個微任務隊列,分別是:異步

  1. nextTick 回調隊列,即便用 process.nextTick() 函數添加的回調
  2. 其餘微任務隊列,列如 Promise、queueMicrotask 等

幾個注意點:函數

  • 在 NodeJS 中不止一個隊列,不一樣類型的事件在它們本身的隊列中入隊。
  • 每一個宏任務階段在清空該階段的任務以後,在移向下一個階段以前,都要去清空兩個微任務隊列
  • nextTick 微任務隊列優先級最高,先清空 nextTick 回調隊列再清空其餘微任務隊列
  • 清空其餘微任務隊列以後,還要再檢查一遍 nextTick 回調隊列,確保其已被清空

圖示以下:post

Node.js事件環
相關文章
相關標籤/搜索