事件循环理解Event Loop

参考文章:

lynnelv.github.io/js-event-lo… www.cnblogs.com/jymz/p/7900…

看了好多的文章,事件循环是有2种情况,一种浏览器,另一中是nodejs解析的情况

第一种浏览器的情况: 好多掘金网上面都有画图表示,这里我就不重复了,自己自行查找。 js分同步和异步循环 浏览器一开始的的时候要先把同步任务执行完毕,然后在进行异步,异步分宏任务和微任务。这里先执行微任务在执行宏任务,执行完所有的微任务在执行宏任务。如果宏任务里面有微任务,顺序为宏任务->微任务,在执行外面同级的

macro-task大概包括:script(整体代码), setTimeout, setInterval, setImmediate, I/O, UI rendering。 micro-task大概包括: process.nextTick, Promise, Object.observe(已废弃), MutationObserver(html5新特性) nodejs的区别有的文章说node10和node11是有区别的,node11和现在的浏览器是一直的,但是node10还有差别的。

timers 阶段:这个阶段执行timer(setTimeout、setInterval)的回调

I/O callbacks 阶段:执行一些系统调用错误,比如网络通信的错误回调

idle, prepare 阶段:仅node内部使用

poll 阶段:获取新的I/O事件, 适当的条件下node将阻塞在这里

check 阶段:执行 setImmediate() 的回调

close callbacks 阶段:执行 socket 的 close 事件回调

我们重点看timers、poll、check这3个阶段就好,因为日常开发中的绝大部分异步任务都是在这3个阶段处理的

官网的文档上面说应该setImmediate先执行,但是执行的结果并不一定,这个要看其他运程程序的影响和主程序是否空闲,要是放到一个回调函数中,一定是setImmediate先执行。

转载于:https://juejin.im/post/5c41859e6fb9a04a0821f8c9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值