-
JS 异步编程
JS 是单线程模式工作的(一个时间内只能做一件事),当有较多任务的情况下,任务需要依次排队等待完成,如果遇到某一个或几个任务很耗时的情况就会给用户一种假死的状态,极大地降低了体验效果。为了解决这个问题,提出了异步的工作模式,即不会等待任务的执行,开启任务后立即往后执行下一个任务,耗时任务结束后会自动调用执行传入的回调函数
-
EventLoop
单线程意味着所有的任务必须排队依次执行,JS 的任务分为同步任务和异步任务,同步任务会进入主线程中依次执行,遇到异步任务则会将其放入消息队列中等待执行,当主线程任务执行完之后,执行栈清空,事件触发器会从消息队列中取出一个任务继续执行,执行完毕之后执行栈继续清空,然后重复执行上一步操作,直到全部执行完毕,这个机制称为 EventLoop
-
消息队列
消息队列用来处理异步任务。每当遇到异步调用事件都会将其放入队列中,执行完毕后由任务队列通知主线程,执行事件
-
宏任务 & 微任务
有一个大爷去银行存款,排队等到他去存款的时候突然想要开通手机银行,这时候银行柜员会优先完成大爷的需求再开始其他人的业务。
大爷去存款:宏任务
大爷要开通手机银行: 微任务
在当前的微任务没有执行完成时,是不会执行下一个宏任务的。
常见的宏任务: setTimeout, setInterval…
常见的微任务: promise.then, process.nextTick
相关文档:https://blog.csdn.net/baidu_33591715/article/details/114251417?spm=1001.2014.3001.5501