浏览器工作原理(一):浏览器的进程模型

137 阅读2分钟

我们先来回顾一下进程线程的概念。

进程是操作系统分配资源的最小单位,一个进程包含数据段、代码段、堆栈段等内存空间;一个进程可以创建多个线程,线程是 CPU 任务调度的最小单位。

早期的浏览器是单进程的,该进程包含渲染、网络等线程,用于处理所有 tab 页面的渲染以及网络资源的下载。这些线程共用数据段、堆栈段等内存资源,一旦某个环节出问题,会造成整个浏览器的崩溃。

现代浏览器是一个多进程多线程的模型,每个进程专门负责一部分工作。现代浏览器大概包含以下进程:

进程作用
浏览器进程展示浏览器界面、前进后退,管理子进程等
渲染进程渲染页面
网络进程负责网络资源加载
GPU 进程负责处理 GPU 任务
插件进程负责运行浏览器的各种插件

我们可以通过点击浏览器 More Tools => Task Manager 查看浏览器的进程有哪些。

Snipaste_2024-07-17_20-41-53.webp

当然也可以通过操作系统的任务管理器过滤出所有 chrome 相关的进程,还可以查看该进程启动了哪些线程。

image-20240718130946219.png

在 chrome 中,每个 tab 页都有一个独立的渲染进程,即使其中一个页面出错,也不影响其他页面。

当然,这意味着更高的内存占用。所以,chrome 计划为每个站点创建一个渲染进程,比如 github.com 这个域名下的所有 tab 页共用一个渲染进程。这样一来,其中一个页面出错,只会影响所有 github 相关的页面,但是能大量减少内存占用。(详情查看文档