JavaScript >> Javascript 文檔 >  >> Node.js

節點事件循環如何真正工作:或者為什麼大多數事件循環圖都是錯誤的

當 Bert 在 Node Interactive Europe 2016 上發表關於 Event Loop 的主題演講時,他首先說大多數事件循環圖都是錯誤的。我對在我的演講中使用其中之一感到內疚。 :)

就是這個。在其中,事件循環像熱蛋糕一樣將數據轉回給客戶端。

他的圖表更接近真實的東西。在其中,事件循環開始、工作並最終退出(雙關語)。

所以有幾個重要的步驟:

  1. 你啟動一個腳本:node index.js
  2. setTimeout()setInterval() 開始
  3. 您正在運行一些代碼
  4. 獨角獸功能(稍後會詳細介紹)
  5. 更多代碼
  6. setImmediate() 這並不是真正的直接
  7. 代碼
  8. 清理關閉事件
  9. 最後一個代碼
  10. 如果沒有refs則退出進程 如果您有 refs,則返回 2

Refs 是一個簡單的計數器,當有異步回調要執行時遞增,當它最終執行時遞減。使用流回調(如處理數據)時,只有一個引用增量。

每個JS代碼塊都有自己的process.nextTick()

是的。 nextTick() 應該是立即的和 setImmediate() 應該是下一個刻度。啊。只要記住它們是對立的。換句話說,如果你只有一堆 nextTick() 回調,您的代碼將在該 JS 塊中運行,並且永遠不會進入下一個事件循環週期(步驟 2-9)。

最後,還有獨角獸功能。它就像 Node 和 OS 之間的溝通者。你看,操作系統和它的進程是異步的,但它們看起來是同步的。這個獨角獸利用了異步特性並將其用於 Node 的事件循環。另外,獨角獸很酷:

順便說一句,不管圖表描述了什麼,線程池都沒有發出網絡請求或執行套接字 TCP 工作。後者發生在內核中。

翻桌?確切地。但是 Node 的好處是對於大多數事情,比如構建 Express 服務器或運行 Gulp 任務,你不需要知道事件循環實際上是如何工作的!

非常感謝伯特。這是我在 Node Interactive EU 2016 上最喜歡的演講之一。現在我將重新繪製我的圖表,以更恰當地說明事件循環在 Node.js 中的真正工作原理。 :) 這個怎麼樣?


Tutorial JavaScript 教程
  1. 如何在 Vue 中創建自定義滾動事件

  2. 使用 Vanilla Javascript 延遲加載圖像

  3. 在彈出窗口中提交表單,然後關閉彈出窗口

  4. 如何從 JQuery 代碼重寫純 JavaScript 代碼?

  5. 用 31 行 JavaScript 找到任務人員

  6. 為什麼你應該使用 Vues 新的 Composition API

  7. 如何並行運行多個 npm 腳本

  1. 學習 React JS - 創建一個 React 應用程序 - 第 2 部分(系列)

  2. 使用 JSON Web 令牌保護您的 Node.js 應用程序

  3. ES2019/ES10 特性

  4. 餘燼時報 - 第 160 期

  5. 快速反應原生:立即開始學習使用 JavaScript 進行原生 iOS 開發!

  6. 用於從 DynamoDB 查詢信息的簡單 TypeScript 類

  7. 破壞您未來的初級和中級 JavaScript 開發人員的 8 個習慣

  1. Javascript 開發核心消息

  2. 使用新的 Vorlon.js 插件遠程調試和測試 JavaScript

  3. Twin 簡介:結合最好的 Tailwind 和 CSS-in-JS

  4. 懶一點