前端事件循环的小疑问

#前端##前端面试必备宝典#
我所理解的事件循环是图里的这样的。然后查阅相关资料关于微任务和宏任务的区别。
微任务:直接在js引擎中执行,没有参与事件循环的异步任务
宏任务:参与了事件循环的异步任务
那么问题来了,微任务是怎么进入事件队列的,走不走浏览器线程?走的话那不就是参与了事件循环了?不走的话通过js线程直接放到队列里?
全部评论
我认为 事件循环中遇到宏任务 微任务才会放到队列中,所以 setTimeout是同步执行的 里面的回调函数是异步执行的
2 回复 分享
发布于 2023-10-19 21:48 北京
浏览器环境下,宏任务是放在消息队列里的,事件循环for(;;)从消息队列里取出来执行,个别还有其他队列,比如setTimeout的延时队列,执行都是由渲染进程中的主线程执行的,而微任务是在执行代码过程中,V8引擎开辟一个空间存放微任务队列,所以微任务是代码层级的,宏任务结束之后会有检查点清空微任务队列。
2 回复 分享
发布于 2023-10-19 16:22 浙江
你的理解是有问题的,目前的浏览器有微任务队里实现,blink宏任务按照类型也实现了不同的队列,blink中这块源码: https://source.chromium.org/chromium/chromium/src
1 回复 分享
发布于 2023-10-19 23:16 上海
这是我最新的理解
点赞 回复 分享
发布于 2023-10-22 17:16 广东
js主线程的执行本身就可以看作是一次宏任务,在这个宏任务里会执行掉同步任务在执行所以微任务。后续宏任务同理
点赞 回复 分享
发布于 2023-10-20 06:57 上海
浏览器中有多个“微任务”队列,会按照队列的优先级依次执行,定时器任务放在微任务优先级低的任务队列中。
点赞 回复 分享
发布于 2023-10-20 00:21 上海
还是说,微任务队列是藏在js引擎内部的,跟宏任务不是一起的,图里所谓的事件队列就只是宏任务队列
点赞 回复 分享
发布于 2023-10-19 15:40 广东

相关推荐

算法:LC3. 无重复字符的最长子串(mid,ACM模式,自己写输入输出,直接秒)无项目拷打,只让讲了项目中缓存穿透、缓存击穿、缓存一致性的解决方案。大多时间拷打八股,主要是Mysql、Redis和Kafka(项目中有用到),还有计算机网络。Mysql和Redis考得很深,问了一些工程问题的解决方案没答得很好,最后面试官说知识的广度挺好、深度有欠缺1. SQL事务题,这两个事务同时执行,说明它们的执行流程,失败还是成功-- 表 t 有主键 id,值为 1, 3, 5, 10, 15, 20-- 事务 ASELECT * FROM t WHERE id = 7 FOR UPDATE;-- 事务 BINSERT INTO t VALUES (6, ...);INSERT INTO t VALUES (8, ...);INSERT INTO t VALUES (11, ...);2. Mysql的事务是什么?有哪些特性?3. Mysql的原子性底层如何实现?(undo log)4. 讲一下Mysql的MVCC机制的实现原理(readview、undo log、隐藏字段)5. Mysql的覆盖索引、前缀索引、索引下推分别是什么?6. 如何定位和优化慢SQL语句?(慢查询日志、explain关键字)7. 使用explain分析慢SQL语句时,哪些字段比较重要?8. Mysql的主从复制的数据同步流程是怎样的?(binlog、offset)9. 介绍下Redis的常用数据类型10. 讲一下你项目中如何解决缓存穿透、缓存击穿和缓存一致性问题?11. 如何使用kafka解决消息丢失问题?12. 如何使用kafka防止消息的重复消费问题?13. kafka发送消息时,如果因为网络问题出现消息丢失,如何解决?14. 从浏览器输入百度的网址访问网页的网络过程是怎样的?15. HTTP和HTTPS的区别是什么?
查看15道真题和解析
点赞 评论 收藏
分享
评论
点赞
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务