浏览器的进程架构及演进——以Chrome为例

1,323 阅读2分钟

1 前言

本文为《浏览器工作原理与实践》的读书笔记。

2 进程和线程

进程:进程就是程序的运行实例。具体而言就是:启动一个程序的时候,操作系统会为该程序创建一块内存,用来存放代码、运行中的数据和一个执行任务的主线程,我们把这样的一个运行环境叫进程。

线程:依附于进程,多线程并行处理能提升运算效率。

进程和线程关系的特点

  1. 任一线程出错,都会导致所在的整个进程崩溃。
  2. 同一进程内的线程可以共享进程数据。
  3. 不同进程间数据很难共享。

3 单进程浏览器时代

单进程浏览器:是指浏览器的所有功能模块都是运行在同一个进程里,这些模块包含了网络、插件、JavaScript 运行环境、渲染引擎和页面等。

弊端:

  1. 不稳定
  2. 不安全
  3. 不流畅

4 早期多进程架构

沙箱(sandbox):沙箱中的进程没有访问本地资源的能力(例如文件系统,窗口系统,等等),是一种用于安全的运行程序的机制。

多进程架构的优点:解决单进程架构的上述三点弊端。

5 当前多进程架构

主要进程的功能:

  1. 浏览器进程——负责界面显示、用户交互、子进程管理,同时提供存储等功能。
  2. 渲染进程——负责将 HTML、CSS 和 JavaScript 转换为用户可以与之交互的网页,排版引擎 Blink 和 JavaScript 引擎 V8 都是运行在该进程中,默认情况下,Chrome 会为每个 Tab 标签创建一个渲染进程。
  3. GPU 进程
  4. 网络进程——负责页面的网络资源加载。
  5. 插件进程——负责插件的运行。

弊端:

  1. 更高的资源占用
  2. 更复杂的体系架构

6 未来面向服务的架构

面向服务的架构”(Services Oriented Architecture,SOA):原来的各种模块被重构成独立的服务(Service),每个服务都可以在独立的进程中运行,访问服务必须使用定义好的接口,通过 IPC 来通信,从而构建一个更内聚松耦合易于维护和扩展的系统。

另外, Chrome 还提供灵活的弹性架构。如果在资源受限的设备上,Chrome 会将很多服务整合到一个进程中,从而节省内存占用。