深入解析 Chrome 浏览器架构演进:从单进程到 SOA

本文深入探讨 Chrome 浏览器架构的演变历程,从早期的单进程模型到现代的多进程架构,再到未来的面向服务架构(SOA)。解析进程与线程的区别,以及 Chrome 如何通过架构升级解决稳定性、流畅性与安全问题。

什么是并行处理?

计算机中的并行处理就是同一时刻处理多个任务。使用并行处理能大大提升性能

在操作系统中,多线程可以并行处理任务,但需要注意的是:线程是不能单独存在的,它是由进程来启动和管理的

核心概念:进程 vs 线程

理解浏览器架构,首先要区分两个核心概念:

  • 进程 (Process)一个进程就是一个程序的运行实例。 当你启动一个程序时,操作系统会为该程序创建一块内存,用来存放代码、运行中的数据和一个执行任务的主线程,我们把这样的一个运行环境叫进程进程与线程关系示意图

  • 线程 (Thread)线程是依附于进程的。 一个进程中可以包含多个线程,使用多线程并行处理能显著提升运算效率。

进程和线程关系的 4 个特点:

  1. 牵一发而动全身:进程中的任意一个线程执行出错,都会导致整个进程的崩溃。
  2. 数据共享:线程之间共享进程中的数据。

    例如:线程 A、B、C 可以分别写入数据,然后由线程 D 读取展示。 线程数据共享示意图

  3. 内存回收:当一个进程关闭之后,操作系统会完全回收该进程所占用的内存。
  4. 进程隔离:进程之间的内容相互隔离。 这是为了保护操作系统,避免进程 A 写入数据到进程 B。正是因为严格隔离,一个进程崩溃(或挂起)不会影响其他进程。如果进程间需要通信,必须使用 IPC (进程间通信) 机制。

一、单进程浏览器时代

单进程浏览器是指浏览器的所有功能模块(网络、插件、JavaScript 运行环境、渲染引擎等)都是运行在同一个进程里。

单进程浏览器架构图

这种架构导致了三个致命问题:不稳定不流畅不安全

  1. 不稳定 早期浏览器依赖插件实现功能,但插件很容易崩溃。因为所有模块都在一个进程,一个插件崩溃 = 整个浏览器崩溃。同理,复杂的 JavaScript 代码如果引起渲染引擎崩溃,也会导致浏览器闪退。

  2. 不流畅

    • 脚本阻塞:无限循环的脚本会霸占整个进程,导致页面无法响应。
    • 内存泄漏:早期的内核在关闭复杂页面后,内存往往不能完全回收。使用时间越长,内存占用越高,浏览器越卡。
  3. 不安全 插件通常使用 C/C++ 编写,可以获取操作系统的任意资源。恶意的插件可以窃取账号密码、植入病毒,因为它们没有被限制权限。


二、多进程浏览器时代(早期)

为了解决单进程的问题,Chrome 推出了多进程架构。

早期多进程架构图

从图中可以看出,Chrome 的页面运行在单独的渲染进程中,插件也运行在独立的进程中。进程之间通过 IPC 机制通信。

多进程如何解决旧时代的痛点?

  • 解决不稳定:由于进程隔离,一个页面或插件崩溃,只会影响当前标签页,不会导致整个浏览器关闭。
  • 解决不流畅:JavaScript 运行在各自的渲染进程中。即使某个页面的脚本死循环,也只会卡死那一个标签页,其他页面依然流畅。同时,关闭标签页时,整个进程被销毁,内存被系统完美回收,解决了内存泄漏问题。
  • 解决不安全:多进程架构引入了安全沙箱 (Sandbox)

    沙箱就像是给进程上了一把锁。沙箱内的程序可以运行,但不能在硬盘写入数据,也不能读取敏感文件。恶意程序无法突破沙箱去获取系统权限。


三、目前的 Chrome 架构

最新的 Chrome 架构变得更加精细,通常包含:1 个浏览器主进程、1 个 GPU 进程、1 个网络进程、多个渲染进程和多个插件进程。

最新 Chrome 多进程架构图

主要进程职能:

  1. 浏览器进程 (Browser Process)
    • 大管家:负责界面显示、用户交互、子进程管理、存储功能。
  2. 渲染进程 (Renderer Process)
    • 核心工匠:负责将 HTML、CSS 和 JavaScript 转换为用户可见的网页。
    • Blink 排版引擎和 V8 引擎运行在此。
    • 出于安全,运行在沙箱模式下。默认每个 Tab 一个进程。
  3. GPU 进程
    • 图形加速:最初用于 3D CSS,现在广泛用于网页和 UI 的绘制加速。
  4. 网络进程 (Network Process)
    • 物资运输:负责页面的网络资源加载。它之前是浏览器进程内的一个模块,现在独立出来,提升了稳定性和性能。
  5. 插件进程 (Plugin Process)
    • 外包隔离:负责插件的运行。因插件易崩溃,必须严格隔离。

多进程的代价:

虽然提升了体验,但也带来了新问题:

  • 资源占用高:每个进程都有独立的副本(如 V8 引擎环境),消耗更多内存。
  • 架构复杂:模块间耦合度高,扩展性变差,难以适应新需求。

四、未来:面向服务的架构 (SOA)

为了解决架构臃肿问题,2016 年起,Chrome 团队开始向 “面向服务的架构” (Services Oriented Architecture) 转型。

核心思想是将原来的各种模块重构为独立的服务 (Service)

  • 每个服务可以在独立的进程中运行。
  • 访问服务必须通过定义好的接口(IPC)。
  • 目标:构建一个更内聚、松耦合、易于维护的系统。

Chrome 最终要把 UI、数据库、文件、设备、网络等模块重构为类似操作系统底层的“基础服务”。

Chrome 面向服务架构模型图


总结

  1. 单进程时代:不稳定、卡顿、不安全,但架构简单。
  2. 多进程时代:Chrome 创造性地引入多进程,利用进程隔离沙箱解决了旧时代的难题,但也导致了内存占用高和架构复杂。
  3. SOA 时代:为了适应移动设备、VR 等新场景,Chrome 正将架构重构为面向服务的形式,以实现更优的性能和扩展性。

Chrome 的进化速度极快,越来越多的业务(如视频编辑、3D 游戏)正在迁移到浏览器端。作为开发者,理解浏览器的底层架构,能帮助我们更好地把握这波技术红利。

comments powered by Disqus