• 异步任务是不会立即执行的事件任务。异步任务包括宏任务和微任务。

image.png

image.png

事件循环(Event Loop)是处理非阻塞异步操作的核心机制。事件循环主要由多个阶段组成,每个阶段负责处理不同类型的任务。以下是一个典型的事件循环包含的主要阶段:

简介:单线程还是使用方而言,内部io、网络还是多线程的

┌───────────────────────┐
┌─>│        timers         │
│  └──────────┬────────────┘
│  ┌──────────┴────────────┐
│  │     I/O callbacks     │
│  └──────────┬────────────┘
│  ┌──────────┴────────────┐
│  │     idle, prepare     │
│  └──────────┬────────────┘      ┌───────────────┐
│  ┌──────────┴────────────┐      │   incoming:   │
│  │         poll          │<─────┤  connections, │
│  └──────────┬────────────┘      │   data, etc.  │
│  ┌──────────┴────────────┐      └───────────────┘
│  │        check          │
│  └──────────┬────────────┘
│  ┌──────────┴────────────┐
└──┤    close callbacks    │
   └───────────────────────┘
  1. Timers(定时器)
  2. I/O Callbacks(输入/输出回调)
  3. Poll(轮询)
  4. Check(检查)
  5. CloseCallbacks(关闭回调)

此外,还有两个特殊的阶段:

除了上述阶段之外,还存在微任务(Microtasks)的概念。微任务包括:

一个 Node.js 程序结束时,Node.js 会检查 event loop 是否在等待异步 I/O 操作结束,是否在等待计时器触发,如果没有,就会关掉 event loop。

微任务是在当前宏任务结束后立即执行的,但在控制权传递给下一个宏任务之前。这意味着微任务具有比大多数宏任务更高的优先级。