浏览器知识点整理(五)多进程架构

本文介绍了浏览器的多进程架构,以Chrome为例,包括浏览器主进程、渲染进程、GPU进程、网络进程和插件进程,阐述了各进程的功能和如何提升浏览器的稳定性、流畅性和安全性。同时,讨论了并发与并行的区别,以及进程和线程的概念。通过进程隔离,浏览器能够更好地管理资源,防止一个组件的故障影响整个浏览器。然而,多进程架构也带来了资源消耗和复杂性等问题,Chrome团队正寻求解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

浏览器有很多功能,比如网络请求、页面渲染、JavaScript 执行和 Web 安全防范等等,而这些功能是分散在浏览器的各个功能组件中的,比较多也比较散,那么通过学习浏览器的多进程架构来把这些知识点串起来是很有必要的。

在学习多进程架构之前先来理解一些概念,比如并行和并发、进程和线程。

并发和并行

  • 并发:分别有任务 A 和 任务 B,在一段时间内通过任务之间的切换来完成这两个任务,这个情况是并发。
  • 并行:还是任务 A 和任务 B,但是 CPU 存在两个核心,可以同时执行这两个任务,这种情况是并行。

就好比我现在在敲代码,面前有一杯可乐,但是我必须先敲完代码才能去喝可乐,这种情况下我既不是并发也不是并行。

还是敲代码和喝可乐,我先敲一段代码,然后再去喝一口可乐之后继续敲代码,通过敲代码和喝可乐之间的切换,我完成了这两个任务,这种情况叫并发

还是敲代码和喝可乐,我可以一边敲代码一边喝可乐,这两个任务可以同时执行,实在是快乐,这种情况叫并行

  • 并发的关键是要有处理多个任务的能力,不一定要同时
  • 并行的关键是要有同时处理多个任务的能力

关键在于:是否是同时

进程和线程

  • 进程一个进程就是一个程序的运行实例。详细解释就是,启动一个程序的时候,操作系统会为该程序创建一块内存,用来存放代码、运行中的数据和一个执行任务的主线程,我们把这样的一个运行环境叫进程。
  • 线程线程是依附于进程存在,而进程中使用多线程并行处理能提升运算效率。

进程和线程之间的关系有以下特点:

  • 一个进程可以包含有多个线程
  • 线程之间可以共享进程中的数据
  • 进程之间的内容相互隔离,不同进程数据不能共享
  • 进程中的任意一线程执行出错,都会导致整个进程的崩溃
  • 当一个进程关闭之后,操作系统会回收进程所占用的内存

一个进程还可以要求操作系统生成另一个进程来执行不同的任务,系统会为新的进程分配独立的内存,两个进程之间可以通过 IPC 机制(Inter Process Communication)来进行通信。很多应用都会采用这样的设计,如果一个工作进程反应迟钝,重启这个进程不会影响应用其它进程的工作。

浏览器的多进程架构

不同的浏览器会采用不同的架构模式,并不存在标准,这里的分析是以 Chrome 浏览器作为例子。

Chrome 浏览器采用多进程架构,其顶层存在一个浏览器主进程(Browser process)用以协调浏览器的其它进程。

image.png

最新的 Chrome 浏览器包括:1 个浏览器主进程(Browser Process)、1 个 GPU 进程(GPU Process)、1 个网络进程(NetWork Process)、多个渲染进程(Renderer Process)和多个插件进程(Plugin Process)。

  • 浏览器主进程:主要负责页面显示、用户交互、子进程管理、文件存储等功能。
  • 渲染进程:核心任务是将 HTML、CSS 和 JavaScript 转换为用户可以与之交互的网页。
    • 排版引擎 Blink 和 JavaScript 引擎 V8 都是运行在该进程中,默认情况下,Chrome 会为每个 Tab 标签创建一个渲染进程。
    • 出于安全考虑,渲染进程都是运行在沙箱模式下。
  • GPU 进程:负责处理 GPU 相关的任务。
    • 网页、Chrome 的 UI 界面都选择采用 GPU 来绘制,使得 GPU 成为浏览器普遍的需求,最后,Chrome 在其多进程架构上也引入了 GPU 进程。
  • 网络进程:主要负责页面的网络资源加载,之前是作为一个模块运行在浏览器进程里面的,之后独立处理成为一个单独的进程。
  • 插件进程:主要负责控制一个网页用到的所有插件。
    • 因为插件容易崩溃,所以需要通过插件进程来隔离,以保证插件进程崩溃不会对浏览器和页面造成影响。

我们可以通过 Chrome 浏览器提供的 任务管理器 功能来查看当前浏览器中运行的所有进程和每个进程所占用的系统资源,右键单击还可以查看更多类别信息。

通过浏览器右上角的三个点->更多工具->任务管理器或者快捷键 Shift + Esc 可以打开任务管理器面板:

image.png

浏览器采用多进程的架构模型,通过进程之间的协作来实现网络请求、页面渲染、JavaScript 执行和 Web 安全防范等功能,并且 提升了浏览器的稳定性、流畅性和安全性

  • 稳定性:进程之间相互隔离,某一个进程出现问题不会影响到其他进程。
    • 例如插件是比较容易出现问题的模块,如果是运行在同一个进程里面,插件的意外崩溃会引起整个浏览器的崩溃。
  • 流畅性:网络请求、页面渲染、JavaScript 执行环境和插件等运行在不同的进程里面,减少了线程阻塞的可能性。
    • 例如 JavaScript 是运行在渲染进程中的,所以即使 JavaScript 阻塞了渲染进程,影响到的也只是当前的渲染页面,而并不会影响浏览器和其他页面,因为其他页面的脚本是运行在它们自己的渲染进程中的。
  • 安全性:浏览器在系统层面上限定了不同进程的权限。
    • 例如渲染进程是运行在安全沙箱里面的,因为渲染进程所有的内容都是通过网络获取的,会存在一些恶意代码利用浏览器漏洞对系统进行攻击,所以运行在渲染进程里面的代码是不被信任的。

不过凡事都有两面性,虽然浏览器的多进程模型提升了浏览器的稳定性、流畅性和安全性,但是也带来了一些其它的问题:例如更高的资源占用和更复杂的体系结构

对于上面这两个问题,Chrome 团队也一直在寻求一种弹性方案,既可以解决资源占用高的问题,也可以解决复杂的体系架构的问题。

总结

  • 区分并发和并行的关键在于是否是同时处理多个任务
  • 进程是一个程序运行的实例,线程依附于进程存在,进程中使用多线程并行处理能提升运算效率
  • 现在的 Chrome 浏览器是多进程架构,由 1 个浏览器主进程、1 个 GPU 进程、1 个网络进程、多个渲染进程和多个插件进程组成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时光机上敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值