单线程 eventLoop

• 异步任务是不会立即执行的事件任务。异步任务包括宏任务和微任务。
notion image
 
notion image
 
事件循环(Event Loop)是处理非阻塞异步操作的核心机制。事件循环主要由多个阶段组成,每个阶段负责处理不同类型的任务。以下是一个典型的事件循环包含的主要阶段:
简介:单线程还是使用方而言,内部io、网络还是多线程的
  1. Timers(定时器)
      • 这个阶段处理所有的计时器事件,如setTimeoutsetInterval
      • 当前阶段的任务完成后,会检查是否有定时器到期,并执行相应的回调函数。
  1. I/O Callbacks(输入/输出回调)
      • 处理与文件系统、网络等I/O相关的回调函数。
      • 例如,fs.readFilenet.Server上的连接事件等。
  1. Poll(轮询)
      • 主要用于处理来自libuv的I/O事件。
      • 在这个阶段,Node.js等待I/O操作的结果,并且准备将它们加入队列以便稍后处理。
  1. Check(检查)
      • 在这个阶段,setImmediate回调被调用。
      • setImmediate不同于setTimeout,因为它是在当前事件循环的I/O回调之后,进入下一次事件循环之前执行。
  1. CloseCallbacks(关闭回调)
      • 处理一些关闭资源的回调,如关闭TCP连接或关闭文件等。
此外,还有两个特殊的阶段:
  • Prepare(准备)
    • 这个阶段主要用于async资源,如http.ServerRequest
    • 在这个阶段可以注册setImmediate回调。
  • Finalization(最终化)
    • 这里处理一些清理工作,如finalization钩子。
除了上述阶段之外,还存在微任务(Microtasks)的概念。微任务包括:
  • process.nextTick回调
  • Promise的.then().catch()方法中的回调
  • MutationObserver(不适用于Node.js)
  • QueueMicrotask()
一个 Node.js 程序结束时,Node.js 会检查 event loop 是否在等待异步 I/O 操作结束,是否在等待计时器触发,如果没有,就会关掉 event loop。
微任务是在当前宏任务结束后立即执行的,但在控制权传递给下一个宏任务之前。这意味着微任务具有比大多数宏任务更高的优先级。
Loading...
目录
文章列表
王小扬博客
产品
Think
Git
软件开发
计算机网络
CI
DB
设计
缓存
Docker
Node
操作系统
Java
大前端
Nestjs
其他
PHP