Chrome 到底在忙什么?从你点开浏览器那一刻,窥探它的多进程帝国

113 阅读5分钟

你以为你是在打开浏览器?其实你是在点燃一个“现代操作系统”。
Chrome:我不是浏览器,我是带浏览器功能的分布式计算平台。

当你双击 Chrome 图标的那一刻,屏幕上只露出一个小小的圆润 Logo,而你的电脑已经开始“风扇起飞”,好像它正在为你打开宇宙之门。

这不是夸张——Chrome 底层架构真的复杂到堪比微型操作系统。
今天我们就来一次轻松又专业的深潜:

  • Chrome 为什么是多进程?
  • 一个网页为什么要开一堆进程?
  • JS 明明是单线程的,为什么浏览器不至于卡死?
  • 为什么 IE 动不动就“未响应”,而 Chrome 算稳得一批?

🍺 一、当你打开 Chrome:不是浏览器,而是启动了一个国家机器

双击 Chrome = 启动一个叫 Browser 主进程 的“总理办公室”。

这个主进程有一个 唯一 PID,负责:

  • 管理全局资源
  • 调度其他进程
  • 分配任务
  • 监督网页是否闹事
  • 与系统对接(窗口、标签页、地址栏等)

你看到的 UI(标签页、工具栏、返回按钮)都属于它。

📌 Chrome 不只是一个程序,而是一个“进程群”。

Chrome 会说:

“我们不是浏览器,是多进程宗教,一页一支军队。”

于是你点开一个网页,它就会:

  • ⚙️ 开一个渲染进程
  • 🎨 可能还要调起 GPU 进程
  • 🌐 请求资源要 network 进程
  • 💾 访问缓存要 Storage 进程
  • 🧩 页面用到插件再开插件进程

然后你才看到一个网页。


🧩 二、为什么 Chrome 要这么多进程?不是浪费内存吗?

你可能会吐槽:

“拜托,一个网页你给我开五六个进程?你当我电脑是 64G 内存的吗?”

Chrome:
“我浪费的是内存,换来的是稳定、速度、安全。”

📌 1. 安全隔离

每个 Tab 都是独立进程。
某个页面崩了,不影响其他页面。

这就是为什么你会看到:

“啊?淘宝挂了,但我的掘金、B 站都还能用。”

IE 的时代是:

一个页面挂 = 全家桶陪葬。


📌 2. 性能隔离

即使 JavaScript 死循环,也不会拖垮所有网页。

所以你打开 10 个页面,互不干扰。


📌 3. 安全沙箱

页面代码不能随便访问本地文件,因为:

“你是渲染进程,有你自己的小黑屋(sandbox)。”

这也是为什么 Chrome 安全性比 IE 好太多。


📌 4. 利用多核 CPU

你电脑有 8 核?
Chrome:“好耶,一个 Tab 给你一个核。”

这就是为什么“Chrome 吃内存”但“Chrome 速度快”。


🧬 三、浏览器多进程帝国:各司其职的大军团

让我们把 Chrome 的结构用一张经典彩色图表示:

lQLPKHe2jR8GWivNAe7NBHawIBKptNeB3SMJDT94JesJAA_1142_494.png

是不是像一个小型的“多进程王国”?


🎨 四、重点角色介绍:Chrome 四大金刚

🧑‍⚖️ 1. Browser 主进程

负责:

  • 窗口、标签页 UI
  • 控制导航(URL 输入、前进后退)
  • 管理子进程
  • 负责安全沙箱
  • 管理存储(Cookie、缓存)

一句话:大脑。


🎭 2. Renderer 渲染进程(核心)

Chrome 的渲染进程包含:

  • Blink 渲染引擎
  • V8 JavaScript 引擎

它负责将:

HTML + CSS + JS → 变成你看到的网页

里面有:

  • DOM 树
  • CSSOM
  • render tree
  • layout
  • painting
  • compositing(合成)
  • JS 执行
  • Event Loop 事件循环

📌 每个 Tab 默认一个渲染进程
(除非你开了“同站点隔离”,那会更多)


🖥️ 3. GPU 进程

早期浏览器只有 CPU 渲染,但是:

  • 动画太卡
  • 3D 无法跑
  • 网页越来越花哨

于是 GPU 进程登场:

  • CSS3 动画
  • transform: translate3d
  • WebGL
  • Canvas 加速
  • 界面绘制

Chrome UI 和网页最终都是 GPU 画的。

Chrome:
“你以为是 HTML 在渲染?不,是我 NVIDIA 在画。”


🌐 4. Network 网络进程

以前网络请求是在渲染进程做,后来 Chrome 说:

“网络这么危险,还是独立出去吧。”

网络进程负责:

  • DNS
  • TCP、UDP
  • TLS/HTTPS
  • 资源下载
  • HTTP/2 连接复用
  • 缓存策略

它只负责下载,不负责渲染。


🧵 五、那 JavaScript 单线程与浏览器多线程是怎么配合的?

很多人问过:

“JavaScript 不是单线程吗?为什么浏览器不会卡死?”

这里有个关键点:

JS 单线程运行的是 主线程

但浏览器周边有很多线程:

  • network 线程(下载资源)
  • timer 线程
  • IO 线程
  • 媒体线程
  • GPU 渲染线程
  • 合成线程(Compositor)
  • worker 线程(如果用 Web Worker)

这些线程不在 JS 内,而是在浏览器进程或渲染进程中。

JS 主线程和这些线程通过 事件循环(event loop)协作。


🚕 六、当你访问一个网页:到底发生了什么?

1. Browser 主进程:

“我要导航到 juejin.cn

2. Network 进程:

“我来请求资源。”

  • DNS
  • TCP
  • TLS
  • 下载 HTML

3. Browser 主进程:

“好了,把 HTML 给渲染进程吧。”


4. 渲染进程:

  • 解析 HTML
  • 构建 DOM
  • 构建 CSSOM
  • 计算布局
  • 绘制图层
  • 合成
  • 交给 GPU 进程绘制

V8 开始执行 JS,事件循环开始轮转。


5. GPU 进程:

“我负责最终上屏!”

一个页面完成。


💥 七、为什么打开一个网页会有多个进程?

因为一个网页的完整流程需要至少:

模块进程
UI 操作、Tab 管理Browser 主进程
资源下载Network
网页渲染Renderer
动画绘制GPU
存储访问Storage
插件(如果有)Plugin

你可能会开一个京东页面,Chrome:

“我给你调 5 个进程,安排!”


😂 八、Chrome 为什么这么吃内存?

你打开 20 个页面,就是 20 个渲染进程。

Chrome:
“我保证稳定就得花钱(内存)。”

但相比 IE 的“一个页面挂,全家陪葬”,Chrome 的策略显然更优。


🎯 九、总结:Chrome = 微型操作系统

这就是为什么我们说:

浏览器不是浏览网页的工具,是现代应用的运行平台。

Chrome 的多进程设计带来:

  • 更稳定
  • 更安全
  • 更快
  • 更支持多核

但付出的代价是:

  • 更耗内存
  • 更复杂

✨ 十、完结:你看到的是网页,底层是战斗机器

下次你打开一个网页,请尊重一下:

背后至少五六个进程、十几个线程、几十个模块在为你服务。

Chrome:“我太累了,你们别骂我吃内存了行吗?”