同步/异步任务、宏/微任务基本概念

同步任务:非耗时任务
异步任务:耗时任务
异步执行的运行机制如下:
(同步任务也如此,因为它可以被视为没有异步任务的异步执行):
1. 所有同步任务都在主线程上执行,形成一个执行栈(execution context stack)。
2. 主线程之外,还存在一个“任务队列”,只要异步任务有了运行结果,就在“任务队列”之中放置一个事件。
3. 一旦“执行栈”中的所有同步任务执行完毕,系统就会读取“任务队列”,看看里面有哪些事件。那些对应的异步任务于是结束等待,进入执行栈开始执行。
4. 主线程不断重复第3步

 

 

宏任务和微任务之间的关系

 

 

javascript提供的与“任务队列”有关的方法有:setTimeout、setInterval、process.nextTick和setImmediate。

process.nextTick方法可以在当前“执行栈”的尾部——下一次Event Loop(主线程读取“任务队列”)之前——触发回调函数。也就是说,它指定的任务总是发生在所有异步任务之前。
setImmediate方法则是在当前“任务队列”的尾部添加事件,也即是说,它指定的任务总是在下一次Event Loop时执行。

内容来自[阮一峰博客](http://www.ruanyifeng.com/blog/2014/10/event-loop.html)。

 

宏任务macrotask: 整体代码script(作为第一个宏任务执行)、setTimeout、setInterval、setImmediate、i/o操作(输入输出,比如读取文件操作、网络请求)、ui render(dom渲染,即更改代码重新渲染dom的过程)、ajax等

微任务microtask: Promise(then、catch、finally)、async/await、process.nextTick、Object.observe(⽤来实时监测js中对象的变化)、 MutationObserver(监听DOM树的变化)

posted @ 2023-08-07 14:44  禺心  阅读(72)  评论(0)    收藏  举报