码迷,mamicode.com
首页 > 其他好文 > 详细

event loop事件循环

时间:2021-02-25 11:55:39      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:reset   bsp   get   条件   同步   实现原理   isp   element   RoCE   

了解event loop,我们先了解以下3点

①js是单线程

②异步基于回调实现

③event loop是异步回调的实现原理

我们来看个图

技术图片技术图片?

当检测到是同步任务时,该任务会直接移到调用栈里面再传给浏览器

调用栈-浏览器

当检测到是异步任务时,该任务会被放置到webAPI中即等待队列,当同步任务执行完,调用栈为空的时候,且该异步任务执行时机到了的时候,异步任务会被移到到回调队列

这时候event loop就会去回调队列找,如果回调队列有事件,event loop会获取他并把他转移到调用栈再转移到浏览器

等待队列-同步任务执行完毕,调用栈为空,异步任务执行时机到了-回调队列-event loop获取-调用栈-浏览器

 

这样说可能有点抽象,我们直接上例子

技术图片技术图片?

这个我们都知道输出答案为a,c,b 具体我们来看看

从上往下执行先是console.log(‘a‘),该任务为同步任务,所以直接放置调用栈,再输出到浏览器,调用栈再清空

技术图片技术图片?

然后到定时器,这是个异步任务

先放在等待队列WebAPI

技术图片技术图片?

当满足以下3个条件,异步任务转移到回调队列

①同步任务执行完毕

②调用栈清空

③异步任务到达时机可执行

当异步任务定时器3s到的时候即到时机执行,异步任务转移到回调队列

技术图片技术图片?

同步任务执行完后,event loop开始运作,去回调队列找事件任务,找到后将其转移到调用栈

技术图片技术图片?

最后再将其传到浏览器,这就是event loop实现机制,也印证了上面的那句话,异步回调的原理是event loop

 

event loop事件循环

标签:reset   bsp   get   条件   同步   实现原理   isp   element   RoCE   

原文地址:https://www.cnblogs.com/bryantko/p/14442970.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!