定义
Event 是事件,比如计时器到期、文件可以读取/读取错误、socket有内容/关闭等,都可以称之为事件。
Loop 是循环,比如 while (true) 循环,各个事件有优先级,处理起来按顺序轮询,就叫做 Loop。
Event Loop 就是对事件处理顺序对管理。
顺序
1. timers | 检查计时器
首先看有没有计时器,有的话就执行。(重要)
2. I/O callbacks | 其他回调
再看有无其他回调。
3. idle, prepare | 准备
空闲准备期。
4. poll | 轮询
处理大部分请求,比如文件的读取,http请求处理等。(重要)
5.check | 检查
主要检查处理 setImmediate 回调。(重要)
6. close callbacks | 关闭回调
注意
- 在Event Loop时,Node.js大部分时间都停留在 poll 轮询阶段;
- 大部分事件都在 poll 阶段被处理,如文件、网络的请求。
彩蛋:什么是Node.js?
- 用 libuv 进行异步 I/O 操作;
- 基于 libuv,用 event loop 管理事件处理顺序;
- 实用 C/C++ 库高效处理 DNS/HTTP 等常用功能 (直接用C语言代码会比 JS 处理起来快);
- 用 bindings 让 JS 和 C/C++ 交互沟通(把C语言代码编译成JS可以require的文件);
- 引入 V8 用来运行 JS;
- 提供 Node.js 标准库来简化 JS 代码 这,就是 Node.js ~
Reference List | 参考文献
Node.js 官方文档
方应杭的博客《Event Loop、计时器、nextTick》