event loop

Node的Event Loop分阶段,阶段有先后,依次是

expired timers and intervals,即到期的setTimeout/setInterval
I/O events,包含文件,网络等等
immediates,通过setImmediate注册的函数
close handlers,close事件的回调,比如TCP连接断开


同步任务及每个阶段之后都会清空microtask队列

优先清空next tick queue,即通过process.nextTick注册的函数
再清空other queue,常见的如Promise


而和规范的区别,在于node会清空当前所处阶段的队列,即执行所有task(10之前),现在是每个宏任务然后所有微任务

 

task主要包含:setTimeout、setInterval、setImmediate、I/O、UI交互事件

microtask主要包含:Promise、process.nextTick、MutaionObserver


宏任务:script(整体代码)、setTimeout、setInterval、I/O、事件、postMessage、 MessageChannel、setImmediate (Node.js)

微任务:Promise.then、 MutaionObserver、process.nextTick (Node.js)



 

 浏览器线程构成:

  • GUI 渲染线程
  • JavaScript 引擎线程
  • 定时触发器线程
  • 事件触发线程
  • 异步 http 请求线程
posted @ 2019-11-06 15:07  王利群  阅读(112)  评论(0编辑  收藏  举报