当前位置: 首页 > news >正文

浏览器如何工作(一)进程架构

分享cosine 大佬,版权©️大佬所有

浏览器的核心功能

浏览器,“浏览” 是这个产品的核心,浏览无非分为两步:

  1. 获取想浏览的资源
  1. 展示得到的资源

 

现代浏览器还增加了交互功能,这涉及到脚本运行。因此,理解浏览器的核心就是理解其三大引擎如何工作:

  • 网络引擎
  • 渲染引擎
  • 脚本引擎

 

浏览器架构的选择:单进程 vs 多进程

在设计浏览器这样复杂的程序时,我们面临两种基本结构的选择:

  1. 单进程 + 多线程:所有功能集中在一个进程中,通过多线程实现各个功能。
  1. 多进程 + 每个进程少量线程 + IPC 通信:核心服务被抽离成独立进程,进程间通过 IPC 通信。

 

单进程 ,多线程模式

 

多进程模式

选择哪种结构,这是一个值得考虑的问题。我们可以想想各自的优缺点:

 

单进程结构:

优点:

  1. 内存效率高,多个线程共享一个进程的内存开销
  1. 通信效率高,线程之间由于可以访问公共内存,通信开销较小

 

缺点:

  1. 稳定性差,一个线程挂掉可能引起整个进程挂掉(对于浏览器而言,这是致命的,比如一个页面挂掉,可能导致整个浏览器挂掉)
  1. 安全性差,进程之间可以访问公共内存,页面之间难以实现有效的沙箱隔离
  1. 可拓展性差,功能越多,意味着一个进程越来越大庞大,耦合难以避免的变多

 

多进程结构:

优点:

多进程程序解决了单进程的一些缺点

  1. 稳定性:一个进程挂了不会引起其他进程(一个页面挂了不会影响其他页面)
  1. 安全性:进程之间天然隔离,可以实现更严格的沙箱
  1. 利用现代 CPU:多进程可以更好的使用现代多核 CPU
  1. 拓展性:将各个模块抽离成一些独立的进程,实现解藕,单独维护

 

缺点:

  1. 更多的资源(内存,I/O,CPU时钟)消耗
  1. 更多的进程通信(IPC)开销

 

浏览器架构的历史演变

在回看一个产品时,不要脱离其历史背景。

早期的浏览器,功能简单,且计算机内存资源昂贵,此时单进程的设计也许更合理。

但随着人类社会的发展,计算资源相对宽裕,计算能力大幅度提升,且用户的复杂了很多,此时,多进程的结构更加合理。

1990年代单进程架构内存资源昂贵简单的网页内容2000年代初单进程多线程网页开始复杂化多核处理器出现2008年Chrome发布多进程架构硬件性能提升内存成本下降2010年代多进程架构普及移动设备兴起网页应用复杂度大增现在持续优化的多进程架构智能资源管理云计算和边缘计算的影响浏览器架构的演变

浏览器架构的选择与其所处的时代背景密切相关:

  • 早期:功能简单,计算机资源昂贵,单进程设计更合理。
  • 现代:计算资源丰富,用户需求复杂,多进程结构更加适合。

 

 

现代多进程浏览器架构

前面提到,现代浏览器使用多进程的架构模式。

以我的 Chrome 浏览器举例:

  • 浏览器主进程:
    • 程序 UI(地址栏,书签栏,前进后退按钮)
    • 管理标签和窗口
    • 协调其他进程
    • 网络请求相关
  • GPU 进程:
    • 处理 GPU 任务,加速渲染
    • 处理 OpenGL 和 2D 绘图操作
    • 将渲染进程的绘制命令转为 GPU 命令
  • 实用工具进程:
    • 浏览器将一些特定的任务封装为了独立的进程,比如音频处理,文件解压,存储
  • 渲染进程
    • 浏览器会尽力为每个标签页提供一个独立的渲染进程
    • 解析和渲染网页资源
  • 拓展进程
    • 现代浏览器通过插件扩展功能,为了安全性,每个插件运行在一个独立的进程中

具体功能

主要进程

用户界面

标签管理

进程协调

网络请求

网页渲染

JavaScript执行

图形处理

硬件加速

第三方插件运行

扩展功能运行

特定任务处理

浏览器主进程

渲染进程

GPU进程

扩展进程

实用工具进程

Chrome浏览器

 

Chrome架构进化的目标是将整个浏览器程序的不同部分服务化,便于分割或合并。

 

前面提到,多进程架构会引起更多的内存和计算开销,所以 chrome 选择了更灵活的方式:

基本思路是:

  • 在高配设备中,每个服务独立开进程,保证稳定;
  • 在低配设备中,多个服务合并为一个进程,节约资源。同样的思路也应用到了Android上。

 

 

结语

一个应用的设计与其时代背景有关,技术的推进本质是用户需求的推进。而 Chrome 架构设计也充分体现了一个灵活的架构的优势。

 

浏览器的核心功能

浏览器架构的选择:单进程 vs 多进程

浏览器架构的历史演变

现代多进程浏览器

http://www.lryc.cn/news/424253.html

相关文章:

  • 【LeetCode】两数之和
  • UE5学习笔记11-为拿取武器添加动画
  • 68. 文本左右对齐【 力扣(LeetCode) 】
  • 【中等】 猿人学web第一届 第6题 js混淆-回溯
  • 低、中、高频率段具体在不同应用中的范围是多少
  • Oxford Model600 Model400低温氦压缩机cryogenic helium compressor手侧
  • Golang面试题四(并发编程)
  • 计算机学生高效记录并整理编程学习笔记的方法
  • 【书生大模型实战】L2-LMDeploy 量化部署实践闯关任务
  • 《编程学习笔记之道:构建知识宝库的秘诀》
  • DETR论文,基于transformer的目标检测网络 DETR:End-to-End Object Detection with Transformers
  • untiy有渲染线程和逻辑线程嘛
  • 什么是数据仓库ODS层?为什么需要ODS层?
  • permutation sequence(
  • PCL 三线性插值
  • JVM虚拟机(一)介绍、JVM内存模型、JAVA内存模型,堆区、虚拟机栈、本地方法栈、方法区、常量池
  • Python利用xlrd复制一个Excel中的sheet保留原格式创建一个副本(注:xlrd只能读取xls)
  • 40、Python之面向对象:扩展的对象属性解析顺序(描述符 + MRO)
  • stm32—时钟、定时器和看门狗
  • Windows平台RTSP|RTMP播放器如何实时调节音量
  • Leetcode JAVA刷刷站(10)正则表达式匹配
  • 合并图片为pdf
  • 【Linux Install】Ubuntu20, Windows10 双系统安装
  • Keepalived + LVS实现高可用
  • Gin框架接入Prometheus,grafana辅助pprof检测内存泄露
  • 上海凯泉泵业入职测评北森题库题型分析、备考题库、高分攻略
  • Linux:基础IO
  • 奥运奖牌窥视
  • RUST实现远程操作电脑手机
  • spring01-spring容器启动过程分析