浏览器的多线程与JS单线程

浏览器的进程与线程

关于浏览器的进程与线程,不知道有没有和我一样傻傻分不清楚的,看的文章也不少,但总是缺少一个机会吧这些概念串联起来。直到最近需要在公司做一个技术分享,才狠下心来决定非把它弄懂不可。自己也算是有了一些小收获,在这里分享出来,也当成是一个再次总结的过程ヾ(◍°∇°◍)ノ゙。

1.浏览器是多进程的
1.1基本概念

关于进程与线程的基本概念,这里不做过多解释,可以参考阮老师的进程与线程的一个简单解释;可大致理解为,一个进程包含一至多个线程,进程的内存空间可以被改进程内的线程共享;

1.2浏览器的进程有哪些

打开你的浏览器的任务管理器,你看到的每一项都是一个浏览器进程,在下图中,红色的是我页面打开的三个标签页,其他进程则是由浏览器管理的一些其他进程。
在这里插入图片描述
总的来说,浏览器的进程可以被分为以下几类:

  • Browser进程
    浏览的的主进程,负责创建/销毁其他进程
  • 第三方插件进程
    负责管理第三方插件
  • GPU进程
    GPU进程的启动时机是由browser进程,负责图形、视频的渲染加速
  • 浏览器渲染进程
    • 负责渲染浏览器界面
    • GUI 渲染线程与 JS 引擎线程是互斥的(这就是为什么当页面中的js代码片段运行一段死循环时,页面会被卡住,无法执行、相应任何操作)
2.关于浏览器渲染进程

作为一个前端,最值得我们关注的当然是浏览器渲染进程了。因为这个进程内负责了,决定页面渲染的执行时机、JS 的解析执行、事件的循环控制。

2.1浏览器渲染进程包含的线程有哪些?

在这里插入图片描述
如图所示,浏览器的渲染进程主要包含 GUI渲染线程Js引擎线程事件触发线程定时器线程异步http请求线程等线程,其中GUI线程和Js引擎线程是互斥的,即当页面执行Js代码的时候,页面是会停止渲染更新的,反过来也是同样的道理。而我们常说的JS是单线程这句话里面的js就是指我们上面提到的**Js引擎线程**。
到这里可以思考一下,当某个片段代码运行时间很长(比如http请求)的时候,由于Js是单线程的,所以是会阻塞后续代码的执行的,Js是怎样解决这个问题的呢?
这里就引入了Js里面拎一个重要的概念,事件循环。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值