为了账号安全,请及时绑定邮箱和手机立即绑定

浏览器的多进程基础

浏览器的多进程

要想搞明白什么是浏览器的多进程,首先得知道什么是进程。按照维基百科的说法:

进程是计算机中已运行程序的实体。进程是线程的容器,进程本身不运行。程序本身只是指令的集合,进程才是程序(指令)的真正运行。每个程序可以有多个进程,每个进程都有自己的资源。

简单来讲,进程就是CPU资源分配的最小单位,而线程则是CPU调度的最小单位。

而我们很早就知道浏览器是多进程的,浏览器之所以能够运行,就是因为系统给它的进程分配了资源。也就是说,我们每打开一个Tab页,就相当于创建了一个独立的浏览器进程。那么浏览器多线程的优势有哪些呢,据我在网上所看到的说法,感觉挺有道理的主要是以下四个:

  1. 避免当个page crash影响整个浏览器

  2. 避免第三方插件crash 影响整个浏览器

  3. 多线程充分利用了多核的优势

  4. 方便使用沙盒模型隔离插件等进程,以提高浏览器的稳定性

简单来说:浏览器的多进程就是防止一个Tab页面崩溃了而导致整个浏览器的崩溃。

既然浏览器是多进程的,那么这个多进程中的诸多进程,肯定都有着自己各自的类型了。总的来说浏览器的主要进程类型有以下几种:

  1. Browser进程:这是浏览器的主进程。有且只有一个,它主要有以下几个作用:

  • 负责浏览器页面的显示与页面交互

  • 负责个页面的管理。创建和销毁其他进程

  • 将 Renderer 进程得到的内存中的 Bitmap ,绘制到用户页面上。

  • 网络资源的管理,下载等。

  1. 第三方插件进程:每种类型的插件都对应着一个进程,只有当使用该插件时才会创建该进程

  2. GPU进程:最多一个,用于3D绘制

  3. 浏览器渲染进程,也就是浏览器内核,Renderer进程,内部是多线程的:默认每个Tab页面都是一个进程,互相不影响。主要作用是页面渲染,脚本执行,事件处理等。

浏览器渲染进程

前面我们曾提到浏览器渲染进程,我以前也写过一篇文章,专门来讨论浏览器的渲染原理及过程。毫无疑问的是,浏览器的渲染进程是非常重要的进程,因为页面的渲染,JavaScript的执行,事件的处理等都需要在这个进程里进行,因此这个进程我们得好好的来掌握它。

首先我们要知道的是,浏览器的渲染继承是多线程的,它主要包含以下几种常驻线程:

  • GUI渲染线程:主要负责渲染浏览器页面。此外当页面进行Repaint和reflow时,该线程也会执行。需要注意的是GUI渲染线程与JavaScript引擎是互斥的,当JavaScript引擎执行时,GUI线程就会被挂起,GUI更新会被把被保存在一个队列中,等JavaScript引擎空闲时立即执行。

  • JavaScript引擎线程:通常也被我们称为JavaScript内核,负责处理JavaScript脚本程序,运行代码。比如大名鼎鼎的V8引擎。JavaScript引擎会一直等待着任务队列的到来,然后加以处理,一个Tab页中无论何时都只有一个JavaScript线程在运行JavaScript程序。

  • 事件触发线程:它归属于浏览器而不是JavaScript引擎,用于控制事件循环。

  • 定时触发器线程:也就是 setInterval 与 setTimeout 所在线程

  • 异步http请求线程:在XMLHttpRequest在连接后通过浏览器新开一个线程请求,
    可以检测到状态的变更。如果设置有回调函数,异步线程就产生状态变更事件,并将这个回调再放入事件队列中,最后由JavaScript引擎执行。



作者:srtian
链接:https://www.jianshu.com/p/57800100e5d5

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消