浏览器与Node的事件循环有何区别

浏览器

关于微任务和宏任务在浏览器的执行顺序是这样的

执行一只task(宏任务)

执行完micro-task队列(微任务)

如此循环往复下去

Node

Node的事件循环是libuv实现的

大体的task宏任务执行顺序是这样的

timers定时器:本阶段执行已经安排的setTimeout()和settinterval()的回调函数

pending callbacks待定回调:执行延迟到下一个循环迭代的I/O回调

idle.prepard仅系统内部使用

poll轮询 检索新的I/O事件,执行与I/O相关的回调(几乎所有情况下,除了关闭的回调函数,它们由计时器和setimmediate排定的之外 ) 其余情况node将在此阻塞

check检测 setimmediate()回调函数在这里执行。

close callbacks关闭的回调函数: 一些准备关闭的回调函数

微任务和宏任务在Node的执行顺序

Node 10以前

执行完一个阶段的所有任务

执行完nexTick队列里面的内容

然后执行完微任务队列的内容

Node 11以后 

和浏览器的行为统一了都是每执行一个宏任务就执行完微任务队列。



---Every day to be a little better---

你可能感兴趣的:(浏览器与Node的事件循环有何区别)