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()的回调函数在微任务中优先级最高,执行完后才会开始其他微任务

浙公网安备 33010602011771号