5月27日 22:32

Chrome 浏览器的多进程架构是怎样的?

Chrome 多进程架构将浏览器功能拆分到独立进程中运行,核心目标是隔离故障、提升安全和利用多核性能。最新版 Chrome 打开一个页面至少启动 4 个进程:浏览器进程、渲染进程、GPU 进程和网络进程。

五种核心进程

浏览器进程是整个浏览器的"总管",负责地址栏、书签、前进后退等 UI 交互,同时协调其他子进程的创建与销毁。

渲染进程是数量最多的进程,每个标签页(严格说是每个站点)分配一个。它运行 Blink 排版引擎和 V8 引擎,将 HTML/CSS/JS 转化为可交互页面。渲染进程被沙箱隔离,即使被恶意代码攻破也无法直接访问系统资源。

GPU 进程专门处理 GPU 任务,最初只为 3D CSS,现在所有页面合成和 UI 绘制都依赖它。

网络进程负责所有网络请求,从浏览器进程中独立出来后,网络 I/O 不再阻塞 UI 线程。

插件进程运行浏览器扩展,每个插件独立一个进程,崩溃不影响其他页面。

架构演进:从多进程到面向服务

2016 年起 Chrome 推进 SOA(面向服务架构)重构,将浏览器进程内的模块(存储、网络、UI 等)拆成独立服务,按需运行在独立进程或合并到现有进程中。资源充裕时拆分更细,资源紧张时合并更省内存——这种弹性是传统多进程架构做不到的。

Site Isolation 站点隔离

2018 年 Spectre 漏洞暴露了同进程内不同 iframe 可互相读取内存的风险。Chrome 随即上线 Site Isolation:不同站点(same-site)的页面强制分到不同渲染进程,即使同一标签页内的跨站 iframe 也不例外。这是对"每个标签页一个进程"策略的重要补丁。

进程间通信

各进程通过 Mojo(Chrome 现代 IPC 框架)进行异步消息传递,大数据场景使用共享内存。渲染进程通过 RenderProcess 对象与浏览器进程保持连接。

追问方向

  • Chrome 多进程的内存代价如何?——每个进程独立一份 V8 堆和 Blink 对象,内存开销显著,Chrome 用进程复用(Process Sharing)缓解。
  • 渲染进程为什么必须沙箱化?——渲染进程直接执行第三方代码,沙箱限制其系统调用,即使被攻破也只能在受限环境中操作。
  • 如何用 DevTools 观察进程?——打开 chrome://process-internals 或任务管理器(Shift+Esc)查看各进程的内存和 CPU 占用。
标签:Chrome