JS之事件循环(event loop)
一、什么是事件循环?
定义:
- 因为js是一门单线程语言,为了防止阻塞,我们把代码(任务)分成了同步和异步。
- 同步代码给js引擎(js主线程),异步代码交给宿主环境(浏览器/Node)。
- 同步代码放入执行栈中,异步代码等待时机成熟送入任务队列中排队。
- 执行栈中执行完毕,会去任务队列中看是否有异步任务,有就推送到执行栈中执行,反复循环查看执行, 这种过程就是事件循环(eventloop)。
二、事件循环的过程
1.流程图
2.文字描述
1.先执行所有同步任务,碰到异步任务放到任务队列中
2.同步任务执行完毕,开始执行当前所有的异步任务
3.先执行异步任务队列所有的微任务
4.然后执行一个宏任务
5.然后再执行所有的微任务
6.再执行一个宏任务,再执行所有的微任务......依此类推到执行结束。
三、异步任务
定义:异步任务指的是不进入主线程、而进入"任务队列"的任务,只有等主线程任务执行完毕,"任务队列"开始通知主线程,请求执行任务,该任务才会进入主线程执行。
异步任务又分为宏任务和微任务:
micro-task(微任务):Promise.then,Promise.catch,Async/Await,process.nextTick
macro-task(宏任务):包括整体代码script,setTimeout,setInterval
发现了一篇总结的很详细很到位的文章,推荐大家进去学习。点击此处打开链接