Blink 和 V8 在 Chromium 里跑在哪?讲清浏览器进程、渲染进程、GPU 与网络进程的分工,以及为什么要有站点隔离。
打开 Chrome 自带的任务管理器,你看不到一个叫"Chrome"的程序,而是一长串独立进程:一个属于浏览器本身,一个或多个属于网页,一个属于 GPU,一个属于网络。这份列表就是整个架构的缩影。Chrome、Edge、Brave、Opera 背后的开源项目 Chromium,并不是跑在同一块内存里的单个引擎,而是一组相互协作的进程;Blink(渲染引擎)和 V8(JavaScript 引擎)只存在于其中一类进程里。本文只回答一个问题:Blink 和 V8 在 Chromium 里到底跑在哪,各进程如何分工?
要点速览
- Chromium 以多进程方式运行:一个高权限的浏览器进程负责界面、标签页与协调,外加受沙箱限制的渲染进程、GPU 进程,以及网络等工具服务。
- **Blink 和 V8 运行在渲染进程里。**解析 HTML、执行页面 JavaScript、计算布局都在这里——它也是被刻意设为最不受信任的部分。
- 拆分的目的是稳定与安全:一个页面崩溃不应拖垮整个浏览器,被攻破的页面也不该读到你的文件或其他网站的数据。
- **站点隔离(Site Isolation)**更进一步,尽量让不同站点的页面待在不同的渲染进程里,这一防御在 Spectre 类 CPU 漏洞之后被加强。
- 所有基于 Chromium 的浏览器共享这套结构,这也是引擎层面的特征很难伪造的原因之一。
一句话模型
Chromium 多进程架构设计文档把思路讲得很直白:把处理不可信网页内容的代码放进独立且受限的进程,再由一个高权限进程统一掌管。Google 的《现代浏览器内部探秘》系列从用户视角讲了同一个故事,角色也是同一批进程。如果你想先了解什么是浏览器引擎,可以先读浏览器内核详解再回来。
谁跑在哪
多年来 Chromium 的具体进程布局一直在变,设计文档在部分地方也已是历史资料,所以请把下面的内容当作稳定的核心,而不是当前的进程清单。两份资料在这些角色上是一致的。
| 进程 | 其中运行的内容 | 能接触到什么 |
|---|---|---|
| 浏览器进程 | 窗口、地址栏、书签、前进后退按钮;协调所有其他进程 | 权限最高:文件、系统资源、界面,以及对所有其他进程的控制 |
| 渲染进程 | 网页内容的 Blink(HTML、CSS、布局、绘制)与 V8(JavaScript) | 极少:在沙箱中运行,沙箱之外的任何事都要请求浏览器进程 |
| GPU 进程 | 交给图形硬件的工作,如合成与绘制 | 图形驱动,与请求绘制的页面相互隔离 |
| 网络及其他工具服务 | 获取资源,以及放在浏览器进程之外更安全的辅助任务 | 网络访问,但不与页面代码共用进程 |
关键在中间一行。标签页中的页面内容由渲染进程处理,渲染引擎与 JavaScript 引擎这一对搭档正是在这里碰面。读过渲染引擎与 JavaScript 引擎的区别就会明白,文中所说"两套引擎在一次页面加载中协作",发生在同一个渲染进程内部:Blink 构建 DOM 与布局,V8 运行可以修改它们的脚本,整个过程不需要跨越进程边界。
为什么要把浏览器拆开
设计文档和 Google 的讲解都提到了两个驱动因素。
**崩溃。**网页会运行任意代码,有时会卡死或崩溃。如果所有东西共用一个进程,一个坏标签页就会带走其他所有标签页和你的会话。拆成独立的渲染进程后,崩溃被限制在局部:浏览器进程依然存活,只在那一个标签页里显示熟悉的"页面崩溃"提示。
**沙箱。**Blink 和 V8 体量巨大、结构复杂,每天都在解析恶意输入,出现漏洞在所难免。Chromium 假定其中一部分可被利用,因此限制损害范围:渲染进程以受限权限运行,需要读文件或建立网络连接时必须向浏览器进程(及其代管的服务)提出请求,而后者可以拒绝。因此渲染进程被攻破并不自动等于你的电脑被攻破。代价是开销:进程越多占用内存越多,也需要进程间消息传递,Chromium 团队为换取安全而接受了这一权衡。
站点隔离:一个站点,一个进程
一个标签页并不等于一个进程,进程边界在不同网站之间最重要。站点隔离的目标是让一个渲染进程只容纳来自单一站点的页面,使某个站点的页面不会和另一个站点的页面处在同一进程内存里——包括内嵌的 iframe,它们可以与嵌入它的页面分处不同进程渲染。Chrome 在 2018 年的 Chrome 67 中为桌面用户默认开启了站点隔离;在 Android 上则因手机内存更紧张而有选择地启用。
动机在 Spectre 之后更加迫切。Spectre 是 2018 年披露的一类 CPU 推测执行漏洞,这类攻击可能让代码读取自身进程中其他位置的内存,所以与银行页面共用一个进程的恶意页面,理论上可以尝试读取本不该看到的数据。把两者放进不同进程就让这块内存无法触及,也让浏览器进程能充当裁判,而不是信任页面本身。同一故事的计时器一面——浏览器为何降低时钟精度以加大这类攻击的难度——见浏览器计时器精度。
这里不会给出内存或性能开销的具体数字,因为它们随设备、页面和 Chromium 版本差异很大,官方页面也没有值得引用的单一数据。
在自己的电脑上亲眼看看
不需要任何额外工具,就能看到这套架构在运转:
- **任务管理器。**在 Chrome 中打开菜单,选择更多工具 → 任务管理器(Windows、Linux 和 ChromeOS 上也可按 Shift+Esc)。每一行就是一个进程:浏览器进程、GPU 进程、网络服务等工具服务,以及各个渲染进程,并标明它服务于哪些标签页或框架。分别打开两个同站标签页和两个不同站点的标签页,对比它们的进程 ID。
- **chrome://process-internals。**这个内部页面会显示浏览器当前采用的站点隔离模式,以及各个框架分别位于哪个进程。需要自己在地址栏输入,网页无法直接链接到它。
这对指纹检测意味着什么
对 BrowserInsight 的读者来说有一个实际推论。Edge、Brave、Opera、Vivaldi 和 Chrome 都从 Chromium 继承这套结构;它们的差别在品牌、默认设置和服务,而不在于 Blink 与 V8 是否运行在沙箱化的渲染进程里。这就是我们的内核检测对它们都报告 Blink/Chromium 引擎的原因,详见 Chromium 与 Chrome 的区别和为什么这么多浏览器使用 Chromium。
这也是引擎层面的行为难以模仿的原因。脚本可以伪造 User-Agent 字符串,却无法改变真正执行代码的 JavaScript 引擎(见 JavaScript 引擎指纹),而一个构建所支持的 Web 特性集合会随版本而变(见引擎版本特性检测)。无头 Chrome 运行的是同一套 Blink 与 V8,所以自动化是靠行为和一致性检查被识别的,而不是靠另一种引擎——参见机器人检测技术。
坦白说一个局限:内核检测是根据浏览器支持哪些特性来识别引擎及其版本的,它不会检查你的进程,也无法告诉你站点隔离是否开启。要查看这些,请使用上文提到的任务管理器和 chrome://process-internals。
常见问题
Chromium 是一个进程还是多个?
多个。一个高权限的浏览器进程协调受沙箱限制的渲染进程、GPU 进程,以及网络与工具服务。具体数量随你打开的页面和 Chromium 版本而变。
Blink 和 V8 运行在浏览器进程里吗?
不是。两者都运行在渲染进程的沙箱里,因为它们处理的是不可信的网页内容。浏览器进程负责界面、协调以及一切需要提升权限的事务。
每个标签页都有独立进程吗?
不严格是这样。标签页与站点相关但并不等同:站点隔离的目标是每个渲染进程一个站点,内嵌的跨站框架可以与外层页面处在不同进程;在某些情况下 Chromium 也可能共享或复用进程。
这是否让 Chrome 比其他浏览器更安全?
它在某些方面让基于 Chromium 的浏览器更难被攻破,但进程隔离只是众多防线之一,其他引擎也有各自的多进程设计。安全性还取决于更新、扩展和你自己的使用习惯。
总结
与其把 Chromium 看作单个程序,不如把它看作一个小型组织:一位高权限的管理者、若干专职角色,以及一个沙箱化的渲染进程,由 Blink 和 V8 在其中把一个不可信的页面变成像素。这种拆分换来了崩溃隔离和更小的受损范围,站点隔离又把这一思路延伸到网站之间。弄清两个引擎的位置,就能理解为什么 Chromium 系浏览器行为相似,以及这套共享技术栈为何如此适合用来区分真实浏览器与仿冒品。


