chrome浏览器多进程架构

601 阅读3分钟

背景

在日常开发中有没有想过Chrome 打开一个页面需要启动多少进程呢?你可以点击 Chrome 浏览器右上角的“选项”菜单,选择“更多工具”子菜单,点击“任务管理器”,这将打开 Chrome 的任务管理器的窗口,如下图:


从上图,最新的 Chrome 浏览器包括:1 个浏览器主进程、1 个 GPU 进程、1 个网络(NetWork)进程、多个渲染进程和多个扩展(插件)进程。

进程与线程

  1.  进程是资源分配的最小单位,它有自己独立的内存空间,每启动一个进程,系统会为它分配地址空间,简历数据表来维护代码段,堆栈段和数据段。并且不同进程之间通信是需要以通信的方式(IPC)进行。
  2. 线程是程序执行的最小单位,线程是共享同一个进程中的数据的,所以线程之间通信更方便。
  3. 但是多进程程序更稳定,多线程程序只要有一个线程死掉,整个进程也会崩溃。但是因为进程之间分配的地址空间不同,一个进程死亡不会对其他的进程造成影响。

单进程浏览器

单进程浏览器(2007 年之前,市面上浏览器都是单进程的)是指所有功能模块都是运行在同一个进程里面。这些模块包括网络,插件,javascript运行环境,渲染引擎和页面等。所以这么多的功能模块运行在一个进程里,是导致单进程浏览器不稳定、不流畅和不安全的一个主要因素。

多进程浏览器

就如背景中展示的图内容一样,打开 1 个页面至少需要 1 个网络进程、1 个浏览器进程、1 个 GPU 进程以及 1 个渲染进程,共 4 个;如果打开的页面有运行插件的话,还需要再加上 1 个插件进程。

浏览器多进程的功能

  1. 浏览器主进程:主要负责界面显示、用户交互、子进程管理,同时提供存储等功能
  2. 渲染进程:核心任务是将 HTML、CSS 和 JavaScript 转换为用户可以与之交互的网页,排版引擎 Blink 和 JavaScript 引擎 V8 都是运行在该进程中,默认情况下,Chrome 会为每个 Tab 标签创建一个渲染进程。出于安全考虑,渲染进程都是运行在沙箱模式下
  3. GPU 进程:GPU 进程的使用初衷是为了实现 3D CSS 的效果,只是随后网页、Chrome 的 UI 界面都选择采用 GPU 来绘制,这使得 GPU 成为浏览器普遍的需求。最后,Chrome 在其多进程架构上也引入了 GPU 进程
  4. 网络进程:主要负责页面的网络资源加载
  5. 插件进程:主要是负责插件的运行,因插件易崩溃,所以需要通过插件进程来隔离,以保证插件进程崩溃不会对浏览器和页面造成影响

多进程浏览器的优缺点

虽然多进程模型提升了浏览器的稳定性、流畅性和安全性,但同样不可避免地带来了一些问题:

  • 更高的资源占用。因为每个进程都会包含公共基础结构的副本(如 JavaScript 运行环境),这就意味着浏览器会消耗更多的内存资源。
  • 更复杂的体系架构。浏览器各模块之间耦合性高、扩展性差等问题,会导致现在的架构已经很难适应新的需求了。




学习于time.geekbang.org/column/intr…