面试必问EventLoop事件

EventLoop事件

1.首先,我们必须清楚javascript,是一门 单线程的语言,意思是,当我们执行时,只能同时进行一件事情。
在这里插入图片描述
那么会产生什么问题: 当一个任务消耗的时间 非常的长的时候,后面的任务只能排队等待,形成程序假死的现象。

2.我们需要知道 什么是同步任务和异步任务,知道是谁来执行 这两个任务
在这里插入图片描述
所以: 同步任务 是 我们 js在执行; 异步任务 是 js的寄宿环境在执行(js可以在很多环境中运行,比如,浏览器,node)

3.接下来看一下同步任务和异步任务的执行过程
在这里插入图片描述
这一步怎么来解释呢? 我们来, 举个例子 ,比如,我们一个米其林餐厅的大厨接到一个任务 让他做一个蒜香小龙虾,和其他的菜,这就 向我们左边的流程接到一个任务,蒜香小龙虾,这其中 有很多步骤 剥蒜 去虾线等等异步任务 ,大厨把这些任务交给他的徒弟去做(相当于程序右边的寄宿环境区),自己先去做其他比较容易的菜,徒弟,做完这些活,把食材放到固定的位置(下方的任务列表),等做完一个菜,去查看食材备好了没有,如果没有,就继续做其他的菜,如果有,就做蒜香小龙虾,这个过程 会一直循环,只要大厨有时间 就会去 查看,这个就本上就是我们说的EventLoop事件。

4.那么我们接下来看一下,异步任务中 又是怎么进行的?
我们来了解一下 宏任务和微任务
在这里插入图片描述
看完之后,我们 要知道 什么任务 是宏任务? 异步Ajax请求 setTimeout setInterval 文件操作(读取文件 readFile 写入文件 writeFile)
什么任务 是 微任务呢? Promise.then .catch 和.finally 还有是 process.nextTick
5.再来看一下 他们的执行过程
在这里插入图片描述
总结:
1.我们执行js文件是,从上到下开始顺序进行,首先将任务分为同步任务 和 异步任务,遇到同步 执行,
2.将遇到的异步任务 放到 寄宿环境中 ,寄宿环境 代为执行
3.同步任务 执行 之后 去任务队列中 查看 有没有 微任务(这个微任务使我们主线程同步任务附加的微任务),有微任务,执行微任务 ,没有微任务 去找宏任务
4,执行宏任务,执行完之后 去查看 这个宏任务有没有 附加的微任务 ,有执行微任务,没有进行下一个宏任务。
5,所有的进行完之后 会在去任务列表中 查看 有没有任务 一直进行中。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值