
- Node.js 教程
- Node.js - 首頁
- Node.js - 簡介
- Node.js - 環境設定
- Node.js - 第一個應用
- Node.js - REPL終端
- Node.js - 命令列選項
- Node.js - 包管理器 (NPM)
- Node.js - 回撥函式概念
- Node.js - 上傳檔案
- Node.js - 傳送郵件
- Node.js - 事件
- Node.js - 事件迴圈
- Node.js - 事件發射器
- Node.js - 偵錯程式
- Node.js - 全域性物件
- Node.js - 控制檯
- Node.js - 程序
- Node.js - 應用擴充套件
- Node.js - 打包
- Node.js - Express框架
- Node.js - RESTful API
- Node.js - 緩衝區
- Node.js - 流
- Node.js - 檔案系統
- Node.js MySQL
- Node.js - MySQL入門
- Node.js - MySQL建立資料庫
- Node.js - MySQL建立表
- Node.js - MySQL插入資料
- Node.js - MySQL查詢資料
- Node.js - MySQL條件查詢
- Node.js - MySQL排序
- Node.js - MySQL刪除資料
- Node.js - MySQL更新資料
- Node.js - MySQL連線查詢
- Node.js MongoDB
- Node.js - MongoDB入門
- Node.js - MongoDB建立資料庫
- Node.js - MongoDB建立集合
- Node.js - MongoDB插入資料
- Node.js - MongoDB查詢資料
- Node.js - MongoDB查詢
- Node.js - MongoDB排序
- Node.js - MongoDB刪除資料
- Node.js - MongoDB更新資料
- Node.js - MongoDB限制結果數量
- Node.js - MongoDB連線查詢
- Node.js 模組
- Node.js - 模組
- Node.js - 內建模組
- Node.js - 實用工具模組
- Node.js - Web模組
- Node.js 有用資源
- Node.js - 快速指南
- Node.js - 有用資源
- Node.js - 討論
Node.js - 事件迴圈
儘管JavaScript是單執行緒的,但Node.js透過儘可能將操作委託給系統核心來執行非同步非阻塞I/O操作,從而使用事件迴圈。大多數現代作業系統核心是多執行緒的,能夠透過在後臺執行來處理多個操作。噹噹前操作完成後,核心會通知Node.js,以便可以將相應的回撥新增到輪詢佇列中,最終執行。
Node.js啟動後(透過提供.js指令碼或在REPL模式下),事件迴圈就會初始化。下圖顯示了事件迴圈的操作順序:

Timers階段執行由setTimeout()和setInterval()排程的回撥函式。
Pending callbacks階段執行推遲到下一個迴圈迭代的I/O回撥函式。
Poll階段有兩個主要功能:(a) 計算應阻塞和輪詢I/O的時間長度;(b) 處理輪詢佇列中的事件。Node.js在此階段檢索新的I/O事件並執行與I/O相關的回撥函式。
Check階段在Poll階段完成後立即執行回撥函式。如果Poll階段變為空閒並且指令碼已使用setImmediate()計時器排隊,則事件迴圈繼續進入Check階段,而不是等待。libuv庫是Node.js執行時的一部分,負責提供處理非同步操作的支援。

V8引擎處理JavaScript程式碼的執行,而Libuv庫利用相應作業系統的原生機制來處理非同步操作。
最後,Close callbacks階段處理使用close事件註冊的回撥函式,例如socket.on(‘close’, function)。如果套接字突然關閉,則會發出close事件,否則將由process.nextTick()方法發出,以將函式的執行推遲到事件迴圈的下一個迭代。
在開始事件迴圈的下一個執行之前,Node.js會檢查它是否正在等待任何非同步I/O或計時器。如果沒有,則執行時會乾淨地關閉。
瞭解事件迴圈的工作原理對於構建可擴充套件的Node.js應用程式至關重要。事件迴圈是Node.js的一個基本部分,它透過確保主執行緒不被阻塞來實現非同步程式設計。