浏览器多进程架构
背景
最近在学习浏览器工作原理相关知识,会记录一些浏览器相关的学习笔记。当我们使用Chrome打开一个页面时,在Chrome 浏览器右上角的“选项”菜单,选择“更多工具”子菜单,点击“任务管理器”我们会看到Chrome 启动了多个进程,好奇的我决定一探究竟。
进程 & 线程
对进程线程不是很了解的同学可以看一下 操作系统之进线程模型
CPU & GPU
CPU是计算机的大脑,负责处理各种不同的任务。在过去,大多数CPU是单芯片的,核心被安置在同一个芯片上。更新的CPU可以支持多核心,运算能力大大加强。而最新的的cpu已经达到10核心20线程数的能力了。
GPU是另一个计算机的组成部分,与CPU不同,GPU更擅长利用多核心同时处理单一的任务。像命名那样,GPU最初被用于处理图像。这就是为什么使用GPU可以更快、更顺畅的渲染页面内容。随着GPU的发展,越来越多的计算任务也可以使用GPU来处理。甚至有人说GPU是人工智能的大功臣,可见GPU已经不再仅用于图像处理上了。
单进程浏览器
早在 2007 年之前,市面上浏览器都是单进程的,其架构图如下所示:
单进程浏览器的缺点
- 由于浏览器是单进程的,其中一个线程的某项任务出错都会造成浏览器崩溃。
- 界面相关的多个任务集中在单一线程,某一项任务阻塞,都会阻塞整个界面的展示,从而造成整个浏览器卡顿。
- 当时的单进程浏览器是没有沙箱这一个概念的,浏览器中运行的任务都可能对操作系统造成威胁。
当前的多进程架构浏览器
最新的 Chrome 浏览器包括:1 个浏览器(Browser)主进程、1 个 GPU 进程、1 个网络(NetWork)进程、多个渲染进程和多个插件进程。如下图:
单进程浏览器的问题得到了解决
- 当某个渲染进程和插件进程出现问题时,影响当只是出现问题当那个页面或者插件,其它页面不会受到影响。
- 当某个渲染进程里的任务出现阻塞,或者内存泄漏,影响当也只会是这个渲染进程所对应当页面,其它页面和浏览器也不会受到影响。
- 至于安全问题,浏览器采用了将渲染进程或者部分操作系统的插件进程放入了沙箱。让其没有办法访问浏览器外部资源,对操作系统造成威胁。
多进程详解
- 浏览器进程。主要负责界面显示、用户交互、子进程管理,同时提供存储等功能。
- 渲染进程。核心任务是将 HTML、CSS 和 JavaScript 转换为用户可以与之交互的网页,排版引擎 Blink 和 JavaScript 引擎 V8 都是运行在该进程中,默认情况下,Chrome 会为每个 Tab 标签创建一个渲染进程。出于安全考虑,渲染进程都是运行在沙箱模式下。
- GPU 进程。Chrome 刚开始发布的时候是没有 GPU 进程的。而 GPU 的使用初衷是为了实现 3D CSS 的效果,只是随后网页、Chrome 的 UI 界面都选择采用 GPU 来绘制,这使得 GPU 成为浏览器普遍的需求。最后,Chrome 在其多进程架构上也引入了 GPU 进程。
- 网络进程。主要负责页面的网络资源加载,之前是作为一个模块运行在浏览器进程里面的,直至最近才独立出来,成为一个单独的进程。
- 插件进程。主要是负责插件的运行,因插件易崩溃,所以需要通过插件进程来隔离,以保证插件进程崩溃不会对浏览器和页面造成影响。
缺点
- 采用多进程架构带来了更高的资源占用
- 更复杂对体系架构,当前设计个模块耦合性高,扩展性差
未来
2016年 Chrome官方使用了 "面向服务架构" (Services Oriented Architecture 简称"SOA")的思想来设计了新的架构。原来的各种模块会被重构成独立的服务(Service),每个服务(Service)都可以在独立的进程中运行,访问服务(Service)必须使用定义好的接口,通过 IPC 来通信,从而构建一个更内聚、松耦合、易于维护和扩展的系统。 同时 Chrome 还提供灵活的弹性架构,在强大性能设备上会以多进程的方式运行基础服务,但是如果在资源受限的设备上,Chrome 会将很多服务整合到一个进程中,从而节省内存占用。
参考文章
浏览器工作原理与实践(极客时间)
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!