Node.js 加油包之 Event Loop

161 阅读1分钟

定义

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 | 关闭回调

注意

  1. 在Event Loop时,Node.js大部分时间都停留在 poll 轮询阶段;
  2. 大部分事件都在 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》