宏任务与微任务

4.11.1 宏任务与微任务
宏任务: setInterval, setTimeout, setImmediate, I/O
微任务: Promise.then Promise.catch Promise.finally, process.nextTick
4.11.2 微任务与宏任务的区别
1. 微任务的回调函数被放置在微任务队列中,宏任务的回调函数被放置在宏任务队列中。
2. 微任务优先级高于宏任务。
当微任务事件队列中存在可以执行的回调函数时,事件循环在执行完当前阶段的回调函数后会暂停
进入事件循环的下一个阶段,事件循环会立即进入微任务的事件队列中开始执行回调函数,当微任
务队列中的回调函数执行完成后,事件循环再进入到下一个阶段开始执行回调函数。 nextTick 的优先级高于 microTask ,在执行任务时,只有 nextTick 中的所有回调函数执行完成后
才会开始执行 microTask
不同阶段的宏任务的回调函数被放置在了不同的宏任务队列中,宏任务与宏任务之间没有优先级的
概念,他们的执行顺序是按照事件循环的阶段顺序进行的。
4.12 Event Loop 代码解析
Node 应用程序启动后,并不会立即进入事件循环,而是先执行输入代码,从上到下开始执行,同步
API 立即执行,异步 API 交给 C++ 维护的线程执行,异步 API 的回调函数被注册到对应的事件队列中。
当所有输入代码执行完成后,开始进入事件循环。
console . log ( "start" )
setTimeout (() => {
console . log ( "setTimeout 1" )
}, 0 )
setTimeout (() => {
console . log ( "setTimeout 2" )
}, 0 )
console . log ( "end" )
// start end 1 2
setTimeout (() => console . log ( "1" ), 0 )
setImmediate (() => console . log ( "2" ))
function sleep ( delay ) {
var start = new Date (). getTime ()
while ( new Date (). getTime () - start < delay ) {
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值