🍪🧁🍧

nodejs和浏览器中事件循环机制

主要区别

nodejs中的事件循环分为六个阶段

  • Timers
    Timers:用于存储定时器的回调函数(setlnterval,setTimeout)。
  • Pendingcallbacks
    Pendingcallbacks:执行与操作系统相关的回调函数,比如启动服务器端应用时监听端口操作的回调函数就在这里调用。
  • idle,prepare
    idle,prepare:系统内部使用。(这个我们程序员不用管)
  • Poll
    Poll:存储I/O操作的回调函数队列,比如文件读写操作的回调函数。

在这个阶段需要特别注意,如果事件队列中有回调函数,则执行它们直到清空队列
,否则事件循环将在此阶段停留一段时间以等待新的回调函数进入。
但是对于这个等待并不是一定的,而是取决于以下两个条件:
如果setlmmediate队列(check阶段)中存在要执行的回调函数。这种情况就不会等待。
timers队列中存在要执行的回调函数,在这种情况下也不会等待。事件循环将移至check阶段,然后移至Closingcallbacks阶段,并最终从timers阶段进入下一次循环。

  • Check
    Check:存储setlmmediate的回调函数。
  • Closingcallbacks
    Closingcallbacks:执行与关闭事件相关的回调,例如关闭数据库连接的回调函数等。

1. nodejs会在每个阶段后检查微任务队列并清空
2. process.nextTick()的回调函数在微任务中优先级最高,执行完后才会开始其他微任务

posted @ 2025-10-24 14:22  不想吃fun  阅读(6)  评论(0)    收藏  举报