获得徽章 0
计算机原理
[✔] 《计算机是怎么跑起来的》
[✔] 《程序是怎么跑起来的》
[✔] 《趣话计算机底层技术》
[✔] 《计算机底层的秘密》
网络协议
[✔] 《网络是怎么连接的》
[✔] 图解网络协议
[✔] 透视HTTP协议
编译原理
[✔] 编译原理之美
[✔] 手把手带你写一门编程语言

对计算机基础的执着到此为止。
展开
5
15年5月至今,25本技术书,34个技术专栏,6个源码阅读,15个js库,29篇文章,做个记录,开启改变。
评论
发现网上很多关于事件循环和宏/微任务的说法是有问题的,文章就不重复写了,澄清一下细节把。

所谓宏任务,是由游览器生成的;所谓微任务,是由JS引擎生成的。生成宿主不同,任务的级别也就不同。类似于操作系统设计了【线程】的概念,但是应用程序设计了【协程】的概念。

宏/微任务其实可以举例为:你在银行柜台办业务,排了一个长队,你们都是【宏任务】,但是轮到你时,你一下子办理了很多事情,比如【转账、办新卡和办信用卡】,这3个事情就是你产生的【微任务】,只有帮你办理完这些,后面那些人才有机会办理业务【宏任务】。

强调一下,有些人可能会以为,只有异步任务才是宏任务,其实并不是如此。比如,script代码、DOM解析这些。

对于游览器的主线程而言,所有任务执行时,最终都是【同步】的,不管你是【延迟】,还是【不延迟】的,最终只有在可以执行时,才会放到【消息队列】,由主线程拉取到执行栈。

在遇到定时器延迟、网络请求时,都是其他线程负责去处理了,消息队列里面这个时候没有它们,只有这些事情异步完成后,才会进入到【消息队列】,然后被拉取执行。

所以,不要把事件循环里面的宏任务和异步与否混在一起了,宏/微代表的只是任务级别,异步/同步代表的是执行时机,对于事件循环这个【死循环】来说,只有现在能执行时,才会进入它的法眼,管你触发是异步还是同步呢,没完成时,不要找我【进消息队列】。

最后,附带一个学习链接:time.geekbang.org。

PS:没有所谓定时器线程,想想也对,主线程完全可以给延迟任务打个时间标记,然后主线程每次根据当前时间进行时间对比检查就是了,和前端localStorage加缓存时间设置一个道理。
展开
戡玉于2024-04-25 11:12发布的图片
评论
前端开发
一个web前端开发,主要干3件事:

定义数据(静态数据/请求数据)
显示数据(给游览器显示)
提交数据(给后台存储)

其他事情,都是为了更好更快地做好这3件事。
展开
4
下一页
个人成就
文章被点赞 310
文章被阅读 27,676
掘力值 887
收藏集
0
关注标签
0
加入于