浏览器的多进程、多线程架构

479 阅读5分钟

🧱 一、浏览器总体架构(多进程 + 多线程)

现代浏览器(如 Chrome、Edge、Safari)是多进程架构,其主要进程有:

进程名称数量主要作用
浏览器主进程唯一控制页面显示、地址栏、书签栏、创建其他进程,协调资源加载与生命周期等
渲染进程每个标签页至少一个渲染页面内容,执行 JS、布局、绘制等;被强沙箱保护
网络进程一般一个负责网络请求(HTTP/HTTPS、缓存、Cookie),和服务器交互
GPU 进程通常一个专门处理图像、图层合成和 GPU 加速绘制等
插件进程可选用于处理浏览器插件,如 PDF 阅读器
辅助进程(Service Worker)可多个用于后台运行的 JS 脚本,实现缓存、离线、推送等

🔁 二、模块间通信关系图

用户操作 → 浏览器主进程 → 网络进程 ←→ 服务器
                         ↓
                     渲染进程(执行 JS / 渲染 DOM)
                         ↓
                     GPU 进程(合成/绘制)

🔍 三、各进程详解

1️⃣ 浏览器主进程(Browser Process)

  • 唯一存在

  • 主要职责:

    • 管理所有标签页的生命周期(创建、销毁)
    • 处理地址栏、书签、历史记录等 UI
    • 负责与操作系统交互
    • 创建和管理其它进程(渲染进程、网络进程等)
    • 进程间通信的“协调者”

2️⃣ 渲染进程(Renderer Process)

  • 每个页面(或 iframe)通常对应一个渲染进程(Site Isolation 策略下甚至更细粒度)

  • 运行在沙箱环境中(避免对系统造成威胁)

  • 职责:

    • 解析 HTML、构建 DOM 树
    • 解析 CSS、构建 CSSOM
    • 执行 JavaScript(由 V8 引擎完成)
    • 构建渲染树 → 布局 → 绘制
    • 与 GPU 进程协作完成图像渲染

渲染进程内线程模型:

线程名称职责
主线程JS 执行、DOM 操作、布局计算、事件分发
样式线程并行解析 CSS(非所有浏览器都有)
合成线程图层合成、处理滚动等
光栅线程将绘制指令转成位图(raster)
Worker 线程Web Worker / Service Worker

3️⃣ 网络进程(Network Process)

  • 独立进程(Chrome M76 后从主进程中拆分出来)

  • 职责:

    • 负责网络请求(HTTP、WebSocket)
    • 处理缓存、Cookie、HTTP 缓存、DNS 查询等
    • 下载资源、处理分片下载

4️⃣ GPU 进程(GPU Process)

  • 独立存在,仅用于加速合成与绘制

  • 职责:

    • 图层合成
    • 执行 GPU 光栅化(硬件加速)
    • 与渲染进程配合完成最终页面绘制

5️⃣ 插件进程(可选)

  • 运行浏览器插件,如 Flash(已淘汰)、PDF 阅读器等
  • 与主进程或渲染进程隔离,避免崩溃传播

6️⃣ 服务工作线程(Service Worker)

  • 非常关键的离线缓存机制

  • 在后台运行的 JS,能够:

    • 拦截请求
    • 缓存静态资源
    • 支持离线模式和推送通知

🔐 四、沙箱机制(Sandbox)

渲染进程运行在沙箱环境中,有效防止网页执行恶意代码访问系统资源。

  • 无法访问本地文件系统

  • 无法调用操作系统 API

  • 无法与其他进程通信(除非通过受控接口)

  • 不具备高权限,无法执行破坏性操作


🧠 五、关键优化机制

技术机制描述
多进程架构提升稳定性(一个崩溃不影响其他标签页)
GPU 合成与加速绘制利用 GPU 提高渲染性能
Service Worker提供离线访问与缓存控制
V8 引擎优化高效执行 JavaScript
Brotli 压缩降低传输大小,节省带宽
HTTP/2、QUIC 支持多路复用与低延迟传输

📦 六、数据流动总结(一个请求如何流转)

用户输入 URL →
浏览器主进程 → 网络进程发起请求 →
服务响应 →
主进程将响应转发给渲染进程 →
渲染进程解析内容 → DOM/CSSOM/RenderTree →
合成 → GPU 渲染 → 页面展示

📝 七、思维导图结构

浏览器架构
├── 主进程
│   ├── 创建管理其他进程
│   ├── 控制 UI
├── 网络进程
│   ├── 发起网络请求
│   ├── 处理缓存、Cookie
├── 渲染进程
│   ├── 构建 DOM/CSSOM
│   ├── 执行 JS
│   ├── 布局与绘制
├── GPU 进程
│   ├── 合成图层
│   ├── 光栅化
├── 插件进程
├── Service Worker
│   ├── 缓存控制
│   ├── 离线加载

🧠 八、浏览器架构中的线程分布图

浏览器架构
├── 浏览器主进程(UI 进程)
   ├── UI线程
   ├── IO线程
   └── 浏览器事件处理线程
├── 渲染进程(每个页面一个)
   ├── 主线程(JS 执行 / DOM 操作)
   ├── 样式计算线程
   ├── 合成线程
   ├── 光栅线程(Raster)
   └── Web Worker / Service Worker线程
├── 网络进程
   ├── 网络线程
   └── 缓存管理线程
├── GPU 进程
   ├── GPU 执行线程
   └── 合成线程(与渲染协同)

🔍 九、各进程下的线程详解


1️⃣ 浏览器主进程(Browser Process)

  • UI线程
    控制浏览器界面(地址栏、书签栏、前进后退按钮等)
  • IO线程
    处理磁盘读写、下载、Cookie、本地存储等
  • 事件处理线程
    管理用户输入事件(如点击、键盘)分发给相应页面进程

2️⃣ 渲染进程(Renderer Process)

负责页面的核心渲染任务,是线程最复杂的部分。

线程名称职责
主线程执行 JavaScript(由 V8 引擎)、构建 DOM、触发布局和绘制流程
样式计算线程并行计算样式(有些浏览器启用)
合成线程负责合成图层,处理滚动、动画等
光栅线程(Raster)将图层转为位图,可能用 GPU 加速
Web Worker背景 JS 线程,做计算不阻塞主线程
Service Worker拦截网络请求,离线缓存,与页面分离

📌 渲染进程是沙箱环境,不允许直接访问文件系统或网络。


3️⃣ 网络进程(Network Process)

处理所有网络资源的下载与缓存:

线程名称职责
网络线程发起、监听、管理 HTTP/HTTPS 请求响应
缓存线程管理缓存文件、本地存储等资源

4️⃣ GPU 进程(GPU Process)

配合渲染进程将位图渲染到屏幕上:

线程名称职责
GPU 执行线程调用 GPU 指令、合成图层
合成线程与渲染进程协同,将图层组织成最终画面