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 请求线程