Chrome 浏览器的多进程架构:为什么一个页面会启动多个进程?

75 阅读4分钟

Chrome 多进程架构全解析:为什么一个页面要启动这么多进程?

当你在任务管理器里打开 Chrome,看到几十个 chrome.exe 进程时,你是否疑惑过:
“明明只开了几个网页,为什么要占这么多进程?”

答案就是——Chrome 故意把浏览器拆成了几十个进程,而这正是它快、稳、安全的根本原因。

从惨痛教训到革命性设计:单进程浏览器的崩塌

早期的浏览器(IE6~8、Firefox 早期、老版 Safari)都是单进程多线程架构: 进程架构图.png

传统单进程浏览器模型

所有标签页、插件、JavaScript、网络请求、渲染全部挤在一个进程里

后果你可能深有体会:

  • 一个页面卡死或崩溃 → 整个浏览器无响应
  • Flash 插件崩溃 → 所有标签页一起白屏
  • 恶意网页能轻易读取你的 Cookie、密码等敏感数据

2008 年,Google Chrome 横空出世,首次全面采用多进程架构,彻底解决了这些痛点,成为现代浏览器的标杆。

Chrome 当前(2025年)的核心进程有哪些?

打开 Chrome 任务管理器(Shift+Esc),你会看到这些主要进程:

进程类型数量职责说明是否沙箱
浏览器主进程1个地址栏、书签、前进后退按钮、窗口管理、进程管理
渲染进程每站点1个(默认)解析HTML/CSS、执行JavaScript、页面布局绘制(Blink + V8)
GPU 进程1个硬件加速、合成、视频解码、WebGL、Canvas
网络进程1个所有网络请求、HTTP缓存、Cookie管理、Service Worker
插件/扩展进程按需旧版插件(已基本淘汰)、部分扩展
Utility 进程多个音频、视频解码、网络服务等外包任务部分是

单进程浏览器.png
Chrome 当前主流的多进程架构(含沙箱隔离)

注意红色虚线框:

  • 渲染进程、插件进程默认运行在**沙箱(Sandbox)**中,权限极低,无法直接读写磁盘或访问系统
  • 只有浏览器主进程、GPU、网络进程有较高权限(部分系统支持)

核心设计理念:Site Isolation(站点隔离)

从 Chrome 67(2018年)开始,默认开启了 Site Isolation(站点隔离),这是目前最严格的安全模型:

线程进程.png

关键变化:

  • 即使是同一个标签页内的不同来源(如主页面 a.com + iframe b.com),也会被强制放到不同渲染进程
  • 彻底杜绝了跨站攻击(如 Spectre 漏洞利用进程共享内存攻击)

举例:打开 https://bank.com 并嵌套了一个恶意 evil.com 的 iframe,
→ 两者会被强制放在两个完全隔离的渲染进程中,相互完全无法访问内存!

多进程 vs 多线程:到底谁在干活?

很多人会混淆进程和线程,我们用一张图彻底说清楚:

多线程处理.png
维度进程(Process)线程(Thread)
内存相互隔离同一进程内共享内存
崩溃影响一个崩溃不影响其他一个崩溃可能导致整个进程退出
资源开销大(每个进程都要复制代码段等)
Chrome使用标签页隔离、站点隔离、安全沙箱渲染管线并行(布局、光栅化、合成等)

即使渲染进程是“多线程”的,JavaScript 仍然是单线程(主线程 + Event Loop),但页面渲染的其它阶段是并行线程加速的。

多进程真的很耗内存吗?Chrome 是怎么优化的?

是的,早年 Chrome 因“吃内存如喝水”被疯狂吐槽。
但现在已经做了大量优化:

  1. 进程合并(Process Merging)
    同站点(相同 eTLD+1,如 a.google.comb.google.com)的标签页会尽量共用一个渲染进程
  2. Site Isolation 可开关
    内存紧张的设备(如 Chromebook)可关闭部分隔离
  3. **内存分区(Partitioned Cache、Storage)
    减少跨站点缓存污染
  4. Back-Forward Cache + Frozen Renderer
    切回标签页时无需重新创建进程

结果:2025 年的 Chrome 在 10 个标签页下,平均内存占用已比 2018 年降低约 30%。

总结:为什么 Chrome 值得用这么多进程?

目标单进程实现多进程实现结果
稳定性崩溃全挂单个标签崩溃不影响其他极致稳定
安全性易被攻破沙箱 + 站点隔离几乎无网页恶意代码可直接危害系统
响应速度某个页面卡住UI也卡各标签独立渲染丝滑
代价内存低内存较高(已大幅优化)可以接受

所以,下次再看到任务管理器里几十个 Chrome 进程时,请对它们说声谢谢——
正是它们默默无闻的隔离与协作,才让你拥有了今天这个快速、稳定、安全的现代网页体验。

如需查看每个标签到底用了哪个进程?
→ Chrome 内置任务管理器(Shift + Esc)→ 右键列标题 → 勾选“进程 ID”即可一目了然。

欢迎收藏、转发,让更多人了解 Chrome 为什么这么“能吃”却又这么“能打”!