浏览器如何工作(一)进程架构
分享cosine 大佬,版权©️大佬所有
浏览器的核心功能
浏览器,“浏览” 是这个产品的核心,浏览无非分为两步:
- 获取想浏览的资源
- 展示得到的资源
现代浏览器还增加了交互功能,这涉及到脚本运行。因此,理解浏览器的核心就是理解其三大引擎如何工作:
- 网络引擎
- 渲染引擎
- 脚本引擎
浏览器架构的选择:单进程 vs 多进程
在设计浏览器这样复杂的程序时,我们面临两种基本结构的选择:
- 单进程 + 多线程:所有功能集中在一个进程中,通过多线程实现各个功能。
- 多进程 + 每个进程少量线程 + IPC 通信:核心服务被抽离成独立进程,进程间通过 IPC 通信。
单进程 ,多线程模式
多进程模式
选择哪种结构,这是一个值得考虑的问题。我们可以想想各自的优缺点:
单进程结构:
优点:
- 内存效率高,多个线程共享一个进程的内存开销
- 通信效率高,线程之间由于可以访问公共内存,通信开销较小
缺点:
- 稳定性差,一个线程挂掉可能引起整个进程挂掉(对于浏览器而言,这是致命的,比如一个页面挂掉,可能导致整个浏览器挂掉)
- 安全性差,进程之间可以访问公共内存,页面之间难以实现有效的沙箱隔离
- 可拓展性差,功能越多,意味着一个进程越来越大庞大,耦合难以避免的变多
多进程结构:
优点:
多进程程序解决了单进程的一些缺点
- 稳定性:一个进程挂了不会引起其他进程(一个页面挂了不会影响其他页面)
- 安全性:进程之间天然隔离,可以实现更严格的沙箱
- 利用现代 CPU:多进程可以更好的使用现代多核 CPU
- 拓展性:将各个模块抽离成一些独立的进程,实现解藕,单独维护
缺点:
- 更多的资源(内存,I/O,CPU时钟)消耗
- 更多的进程通信(IPC)开销
浏览器架构的历史演变
在回看一个产品时,不要脱离其历史背景。
早期的浏览器,功能简单,且计算机内存资源昂贵,此时单进程的设计也许更合理。
但随着人类社会的发展,计算资源相对宽裕,计算能力大幅度提升,且用户的复杂了很多,此时,多进程的结构更加合理。
1990年代单进程架构内存资源昂贵简单的网页内容2000年代初单进程多线程网页开始复杂化多核处理器出现2008年Chrome发布多进程架构硬件性能提升内存成本下降2010年代多进程架构普及移动设备兴起网页应用复杂度大增现在持续优化的多进程架构智能资源管理云计算和边缘计算的影响浏览器架构的演变
浏览器架构的选择与其所处的时代背景密切相关:
- 早期:功能简单,计算机资源昂贵,单进程设计更合理。
- 现代:计算资源丰富,用户需求复杂,多进程结构更加适合。
现代多进程浏览器架构
前面提到,现代浏览器使用多进程的架构模式。
以我的 Chrome 浏览器举例:
- 浏览器主进程:
- 程序 UI(地址栏,书签栏,前进后退按钮)
- 管理标签和窗口
- 协调其他进程
- 网络请求相关
- GPU 进程:
- 处理 GPU 任务,加速渲染
- 处理 OpenGL 和 2D 绘图操作
- 将渲染进程的绘制命令转为 GPU 命令
- 实用工具进程:
- 浏览器将一些特定的任务封装为了独立的进程,比如音频处理,文件解压,存储
- 渲染进程
- 浏览器会尽力为每个标签页提供一个独立的渲染进程
- 解析和渲染网页资源
- 拓展进程
- 现代浏览器通过插件扩展功能,为了安全性,每个插件运行在一个独立的进程中
具体功能
主要进程
用户界面
标签管理
进程协调
网络请求
网页渲染
JavaScript执行
图形处理
硬件加速
第三方插件运行
扩展功能运行
特定任务处理
浏览器主进程
渲染进程
GPU进程
扩展进程
实用工具进程
Chrome浏览器
Chrome架构进化的目标是将整个浏览器程序的不同部分服务化,便于分割或合并。
前面提到,多进程架构会引起更多的内存和计算开销,所以 chrome 选择了更灵活的方式:
基本思路是:
- 在高配设备中,每个服务独立开进程,保证稳定;
- 在低配设备中,多个服务合并为一个进程,节约资源。同样的思路也应用到了Android上。
结语
一个应用的设计与其时代背景有关,技术的推进本质是用户需求的推进。而 Chrome 架构设计也充分体现了一个灵活的架构的优势。
浏览器的核心功能
浏览器架构的选择:单进程 vs 多进程
浏览器架构的历史演变
现代多进程浏览器
相关文章:
浏览器如何工作(一)进程架构
分享cosine 大佬,版权©️大佬所有 浏览器的核心功能 浏览器,“浏览” 是这个产品的核心,浏览无非分为两步: 获取想浏览的资源 展示得到的资源 现代浏览器还增加了交互功能,这涉及到脚本运行。因此,…...
【LeetCode】两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。 示例 1…...
UE5学习笔记11-为拿取武器添加动画
一、一点说明 动画实例通过扩展为所有机器上的每个字符都存在动画蓝图,动画实例只能访问该计算机上的变量。 二、思路 我在武器组件中有一个武器类的指针,判断当前指针是否为空去判断当前角色是否装备武器 三、实现 1.在角色C类中添加是否装备武器的函…...
68. 文本左右对齐【 力扣(LeetCode) 】
一、题目描述 给定一个单词数组 words 和一个长度 maxWidth ,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词;也就是说,尽可能多地往每行中放置单…...
【中等】 猿人学web第一届 第6题 js混淆-回溯
文章目录 请求流程请求参数 加密参数定位r() 方法z() 方法 加密参数还原JJENCOde js代码加密环境检测_n("jsencrypt")12345 计算全部中奖的总金额请求代码注意 请求流程 请求参数 打开 调试工具,查看数据接口 https://match.yuanrenxue.cn/api/match/6 请…...
低、中、高频率段具体在不同应用中的范围是多少
1、低频率段(Low Frequency Range) ①建筑声学和噪声控制:通常将20 Hz 到 200 Hz 的频率范围视为低频段。在这一范围内,声音的波长较长,通常与低音(如重低音音乐)和建筑结构中的振动有关。 ②…...
Oxford Model600 Model400低温氦压缩机cryogenic helium compressor手侧
Oxford Model600 Model400低温氦压缩机cryogenic helium compressor手侧...
Golang面试题四(并发编程)
目录 1.Go常见的并发模型 2.哪些方法安全读写共享变量 3.如何排查数据竞争问题 4.Go有哪些同步原语 1. Mutex (互斥锁) 2. RWMutex (读写互斥锁) 3. Atomic 3.1.使用场景 3.2.整型操作 3.3.指针操作 3.4.使用示例 4. Channel 使用场景 使用示例 5. sync.WaitGr…...
计算机学生高效记录并整理编程学习笔记的方法
哪些知识点需要做笔记? 以下是我认为计算机学生大学四年可以积累的笔记。 ① 编程语言类(C语言CJava):保留课堂笔记中可运行的代码部分,课后debug跑一跑。学习语言初期应该多写代码(从仿写到自己写&#…...
【书生大模型实战】L2-LMDeploy 量化部署实践闯关任务
一、关卡任务 基础任务(完成此任务即完成闯关) 使用结合W4A16量化与kv cache量化的internlm2_5-7b-chat模型封装本地API并与大模型进行一次对话,作业截图需包括显存占用情况与大模型回复,参考4.1 API开发(优秀学员必做)使用Func…...
《编程学习笔记之道:构建知识宝库的秘诀》
在编程的浩瀚世界里,我们如同勇敢的探险家,不断追寻着知识的宝藏。而高效的笔记记录和整理方法,就像是我们手中的指南针,指引着我们在这片知识海洋中前行,不至于迷失方向。在这篇文章中,我们将深入探讨如何…...
DETR论文,基于transformer的目标检测网络 DETR:End-to-End Object Detection with Transformers
transformer的基本结构: encoder-decoder的基本流程为: 1)对于输入,首先进行embedding操作,即将输入映射为向量的形式,包含两部分操作,第一部分是input embedding:例如,在NLP领域&…...
untiy有渲染线程和逻辑线程嘛
之前我也这么认为,其实unity引擎是单线程的,当然后续的jobs不在考虑范围内 如果你在一个awake 或者 start方法中 延时,是会卡住主线程的 比如 其实游戏引擎有一个基础简单理解,那就是不断的进行一个循环,在这个周期循…...
什么是数据仓库ODS层?为什么需要ODS层?
在大数据时代,数据仓库的重要性不言而喻。它不仅是企业数据存储与管理的核心,更是数据分析与决策支持的重要基础。而在数据仓库的各个层次中,ODS层(Operational Data Store,操作型数据存储)作为关键一环&am…...
permutation sequence(
60. Permutation Sequence class Solution:def getPermutation(self, n: int, k: int) -> str:def rec(k, l, ans, n):if(n0): return# 保留第一个位置,剩下数字的组合leftCom math.factorial(n - 1) #用于计算 (n-1) 的阶乘值ele k // leftCommod k % leftCo…...
PCL 三线性插值
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 三线性插值是一种在三维空间中使用已知数据点进行插值的方法。它是在立方体内的插值方法,通过利用立方体的八个顶点的已知值来估算立方体内任意一点的值。三线性插值扩展了一维的线性插值和二维的双线性插值。其基…...
JVM虚拟机(一)介绍、JVM内存模型、JAVA内存模型,堆区、虚拟机栈、本地方法栈、方法区、常量池
目录 学习JVM有什么用、为什么要学JVM? JVM是什么呢? 优点一:一次编写,到处运行。(Write Once, Run Anywhere,WORA) 优点二:自动内存管理,垃圾回收机制。 优点三&am…...
Python利用xlrd复制一个Excel中的sheet保留原格式创建一个副本(注:xlrd只能读取xls)
目录 专栏导读库的介绍库的安装完整代码总结 专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 👍 该系列文…...
40、Python之面向对象:扩展的对象属性解析顺序(描述符 + MRO)
引言 在上一篇文章中,我们简单回顾了Python中在继承语境下的属性解析顺序,同时补充了能够控制、影响属性解析的3个函数/方法(2个魔术方法 1个内置函数),相信对Python中属性的解析,相较于MRO,有…...
stm32—时钟、定时器和看门狗
1. 时钟 什么是时钟呢? 一个可以产生周期性信号的设备 什么是周期性信号? 1 ----- ----- ----- 0 ----- ----- ----- 所以时钟信号就是周期性变化的信号 关于时钟我们有两个比较重要…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
