浏览器及事件循环学习记录

今天学了一些有关浏览器和异步事件循环的知识,在此梳理回忆一下,就想到哪写到哪了

进程

我们的计算机运行程序需要分配内存空间,这块内存空间就可以大致的被成为进程。进程之间相互隔离,一个进程内部出现问题不会影响其他进程。比如,qq出现运行上的问题并不会把微信也带崩。而进程之间同样可以进行沟通,前提是一方需要而另一方同意。

线程

如果把进程比喻成房子、工厂,进程就可以类比为房子中工作的人。一个进程可能有多个线程,比如一个叫王者荣耀的进程,有的线程需要监听玩家的操作,有的线程需要绘制地图、特效,有的线程需要与网络沟通获取其他玩家的操作。如果进程中一个线程都没有,它将被杀死

浏览器

首先我们的浏览器是一个多进程,多线程的非常复杂的机器。如前文所说,多进程有利于浏览器的稳定运行。而其中最主要的进程有:浏览器进程,网络进程,渲染进程

浏览器进程:

主要负责界面显示,用户交互,子进程管理等。

网络进程:

负责加载网络资源

渲染进程:

渲染进程启动后,会开启一个渲染主线程,主线程负责执行HTML,CSS,JS代码。默认情况下,一个新的标签页就是一个新的渲染进程。标签页间互不影响

渲染主线程如何工作,都做了什么?

需要渲染主线程处理的任务包括但不限于:

解析HTML、解析css、计算样式(比如样式的覆盖)、布局、处理图层、执行全局JS、执行计时器、事件处理函数等

既然渲染主线程这么忙,那么就需要被执行的任务进行排队(渲染主线程只有一个,如果有多个线程同时对dom进行操作会出现问题)称为事件循环

渲染主线程之外有一个消息队列,渲染主线程会首先进入一个无限循环,每一次循环会检查消息队列中是否有任务存在,有则执行进入下一次循环,没有则进入休眠。其他线程可以随时向消息队列添加任务,如果此时主线程处于休眠状态则将其唤醒继续循环

相关面试题:如何理解JS的异步?

任务和消息队列的优先级

任务是没有优先级的,在消息队列中先进先出。但消息队列是有优先级的,消息队列不止一条,一种消息队列存放一种任务类型。至少包含了:延时队列(定时器)、交互队列(点击事件)、微队列(之前所说的微任务,例如promise)。他们的优先级微队列>交互队列>延时队列

相关面试题:阐述一下JS的事件循环?js中的计时器能做到精确计时吗?为什么?

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值