勇闯Chromium—— Chromium的多进程架构
问题
构建一个永不崩溃或挂起的渲染引擎几乎是不可能的,构建一个绝对安全的渲染引擎也几乎是不可能的。
从某种程度上来说,2006 年左右的网络浏览器状态与过去单用户、协作式多任务操作系统的状况类似。正如在这样的操作系统中,一个行为不端的应用程序可能导致整个系统崩溃一样,网络浏览器中一个行为不端的网页也可能导致整个浏览器和所有当前正在运行的标签页崩溃。只需一个渲染引擎或插件错误,就能导致整个浏览器和所有当前正在运行的标签页崩溃。
现代操作系统更加健壮,因为它们将应用程序置于彼此隔离的独立进程中。一个应用程序的崩溃通常不会影响其他应用程序或操作系统的完整性,并且每个用户对其他用户数据的访问也受到限制。Chromium 的架构旨在实现这种更健壮的设计。
架构概述
Chromium 使用多个进程来保护整个应用程序免受渲染引擎或其他组件中的错误和故障的影响。它还限制每个渲染引擎进程对其他进程以及系统其余部分的访问。从某种程度上来说,这为网页浏览带来了内存保护和访问控制为操作系统带来的好处。
我们将运行 UI 并管理渲染器和其他进程的主进程称为“浏览器进程”或“浏览器”。同样,处理 Web 内容的进程称为“渲染器进程”或“渲染器”。渲染器使用Blink开源布局引擎来解释和布局 HTML。
从图中可以看到:一个渲染进程可能有多个RenderView视图,对应浏览器进程中的RenderViewHost(在灰色阴影区域中标识)。两者以浏览器进程中的I/O线程为桥梁,通过IPC通信。这种结构为一个渲染进程对应的RenderView创建子RenderView提供了可能,例如在cef中,创建子窗体。如果主窗体的标签页关闭了,子窗体也要关闭。
管理渲染器进程
每个渲染器进程都有一个全局RenderProcess对象,用于管理与父浏览器进程的通信并维护全局状态。浏览器RenderProcessHost为每个渲染器进程维护一个对应的对象,用于管理浏览器状态以及与渲染器的通信。浏览器和渲染器使用 Mojo或 Chromium 的传统 IPC 系统进行通信。
管理框架和文档
每个渲染器进程都有一个或多个RenderFrame对象,这些对象对应于包含内容的文档所在的框架。RenderFrameHost浏览器进程中的相应对象管理与该文档相关的状态。每个对象都 RenderFrame被赋予一个路由 ID,用于区分同一渲染器中的多个文档或框架。这些 ID 在一个渲染器内部是唯一的,但在浏览器内部则不同,因此识别一个框架需要同时拥有一个RenderProcessHost和路由 ID。从浏览器到渲染器中特定文档的通信是通过这些RenderFrameHost 对象完成的,这些对象知道如何通过 Mojo 或传统的进程间通信 (IPC) 发送消息。
组件和接口
在渲染器进程中:
- 处理RenderProcessMojo 设置以及浏览器中相应的旧式 IPC RenderProcessHost。每个渲染器进程只有一个 RenderProcess对象。
- 该RenderFrame对象与浏览器进程中的对应对象 RenderFrameHost(通过 Mojo)以及 Blink 层进行通信。该对象表示选项卡或子框架中一个 Web 文档的内容。
在浏览器进程中:
- 该Browser对象代表顶级浏览器窗口。
- 该RenderProcessHost对象表示单个浏览器 ↔ 渲染器 IPC 连接的浏览器端。RenderProcessHost每个渲染器进程在浏览器进程中都有一个对应的对象。
- 该RenderFrameHost对象封装了与的通信 RenderFrame,RenderWidgetHost处理浏览器中的输入和绘画对于RenderWidget的。
有关此嵌入如何工作的更多详细信息,请参阅Chromium 如何显示网页设计文档。(这个单独起一篇文章)
共享渲染器进程
通常,每个新窗口或标签页都会在一个新进程中打开。浏览器会生成一个新进程,并指示其创建一个单独的RenderFrame,这可能会在页面中创建更多 iframe(可能在不同的进程中)。
有时,在标签页或窗口之间共享渲染器进程是必要的或理想的。例如,一个 Web 应用可以用来window.open创建另一个窗口,而新文档如果属于同一源,则必须共享同一个进程。如果进程总数过大,Chromium 也有一些策略可以将新标签页分配给现有进程。这些注意事项和策略在“进程模型”中进行了描述。
检测崩溃或行为异常的渲染器
每个与浏览器进程的 Mojo 或 IPC 连接都会监视进程句柄。如果这些句柄收到信号,则表示渲染器进程已崩溃,受影响的标签页和框架会收到崩溃通知。Chromium 会显示“糟糕的标签页”或“糟糕的框架”图像,通知用户渲染器已崩溃。您可以通过点击“重新加载”按钮或启动新的导航来重新加载页面。当这种情况发生时,Chromium 会注意到渲染器进程已不存在,并创建一个新的渲染器进程。
渲染器沙盒化
由于渲染器在单独的进程中运行,我们可以通过
相关文章:

勇闯Chromium—— Chromium的多进程架构
问题 构建一个永不崩溃或挂起的渲染引擎几乎是不可能的,构建一个绝对安全的渲染引擎也几乎是不可能的。 从某种程度上来说,2006 年左右的网络浏览器状态与过去单用户、协作式多任务操作系统的状况类似。正如在这样的操作系统中,一个行为不端的应用程序可能导致整个系统崩溃…...
Go语言中常量的命名规则详解
1. 常量的基本命名规则 1.1. 命名格式 1. 使用const关键字声明; 2. 命名格式:const 常量名 [类型] 值; 3. 类型可以省略,由编译器推断; 1.2. 命名风格 大小写规则: 1. 首字母大写:导出常…...

软件质量保证与测试实验
课程 软件质量保证与测试 目的:练习软件测试中白盒测试方法 内容: 测试如下程序段: #include <stdio.h>int main() {int i 1, n1 0, n2 0;float sum 0.0;float average;float score[100];printf("请输入分…...

历年华东师范大学保研上机真题
2025华东师范大学保研上机真题 2024华东师范大学保研上机真题 2023华东师范大学保研上机真题 在线测评链接:https://pgcode.cn/school?classification1 简单一位数代数式计算 题目描述 给一个小学生都会算的1位数与1位数运算的代数式,请你求出这个表…...
【C++】什么是静态库?什么是动态库?
静态库与动态库详解 静态库和动态库是软件开发中两种不同的代码共享和重用机制,它们在链接方式、内存使用和部署方式上有显著区别。 一、静态库(Static Library) 基本概念 静态库是在编译期间被完整复制到最终可执行文件中的预编译代码集合。 主要特点 链接时…...
项目阅读:Instruction Defense
总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 https://learnprompting.org/docs/prompt_hacking/defensive_measures/instruction https://www.doubao.com/chat/6945469301219586 速览 指令防御(Instructio…...
springboot中拦截器配置使用
文章目录 前置拦截器代码拦截器注册疑问 前置 你使用 javaspringboot 常用在: 身份验证与授权,使用拦截器检查用户的身份验证状态和权限级别,确保只有经过验证且有适当权限的用户能够访问特定资源日志记录与审计性能分析与监控࿰…...
用 Python 构建自动驾驶的实时通信系统:让车辆“交流”起来!
用 Python 构建自动驾驶的实时通信系统:让车辆“交流”起来! 自动驾驶技术正加速变革全球交通体系,它不仅是机器学习与计算机视觉的胜利,更是一场 高效通信架构的革命。自动驾驶汽车需要实时交换信息,比如: 传感器数据(雷达、激光雷达、摄像头)V2V(车与车通信)V2X(…...

在机器学习中,L2正则化为什么能够缓过拟合?为何正则化等机制能够使一个“过度拟合训练集”的模型展现出更优的泛化性能?正则化
在现代机器学习的发展历程中,过拟合(Overfitting)始终是亟需克服的重要挑战。其表现如同在训练数据上构建过度复杂的映射函数,虽能实现近乎完美的拟合,但其泛化能力却显著受限,导致模型在测试集或实际应用中…...
day36 python神经网络训练
目录 一、数据准备与预处理 二、数据集划分与归一化 三、构建神经网络模型 四、定义损失函数和优化器 五、训练模型 六、评估模型 在机器学习和深度学习的实践中,信贷风险评估是一个非常重要的应用场景。通过构建神经网络模型,我们可以对客户的信用…...

k8s部署ELK补充篇:kubernetes-event-exporter收集Kubernetes集群中的事件
k8s部署ELK补充篇:kubernetes-event-exporter收集Kubernetes集群中的事件 文章目录 k8s部署ELK补充篇:kubernetes-event-exporter收集Kubernetes集群中的事件一、kubernetes-event-exporter简介二、kubernetes-event-exporter实战部署1. 创建Namespace&a…...
【Excel VBA 】窗体控件分类
一、Excel 窗体控件分类 Excel 中的窗体控件分为两大类型,适用于不同的开发需求: 类型所在选项卡特点表单控件开发工具 → 插入 → 表单控件简单易用,直接绑定宏,兼容性好,适合基础自动化操作。ActiveX 控件开发工具…...

C++性能相关的部分内容
C性能相关的部分内容 与底层硬件紧密结合 大端存储和小端存储(硬件概念) C在不同硬件上运行的结果可能不同 比如:输入01234567,对于大端存储的硬件会先在较大地址上先进行存储,而对于小端存储的硬件会先在较小地址上…...
Spring Boot 项目中常用的 ORM 框架 (JPA/Hibernate) 在性能方面有哪些需要注意的点?
在 Spring Boot 项目中使用 JPA (Java Persistence API) / Hibernate (作为 JPA 的默认实现) 时,性能是一个非常关键的考量点。虽然 ORM 极大地简化了数据库交互,但如果不注意,很容易引入性能瓶颈。以下是一些关键的性能注意事项:…...
基于大模型的大肠癌全流程预测与诊疗方案研究报告
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、大模型技术概述 2.1 大模型原理与架构 2.2 大模型在医疗领域的应用现状 三、术前风险预测与准备 3.1 术前风险预测指标 3.2 大模型预测方法与结果 3.3 基于预测结果的术前准备方案 四、术中风险预测与应…...
解决DeepSeek部署难题:提升效率与稳定性的关键策略
DeepSeek 部署中常见问题及对应解决方案 随着大模型技术的快速发展,DeepSeek 作为国内领先的大语言模型之一,广泛应用于自然语言处理、智能客服、内容生成等多个领域。 然而,在实际部署过程中,许多开发者和企业会遇到一系列挑战&a…...

AI进行提问、改写、生图、联网搜索资料,嘎嘎方便!
极客侧边栏-AI板块 目前插件内已接入DeepSeek-R1满血版、Qwen3满血版 、豆包/智谱最新发布的推理模型以及各种顶尖AI大模型,并且目前全都可以免费不限次数使用,秒回不卡顿,联网效果超好! 相比于市面上很多AI产品,极客…...

GStreamer开发笔记(四):ubuntu搭建GStreamer基础开发环境以及基础Demo
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/147714800 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、O…...

2021年认证杯SPSSPRO杯数学建模A题(第二阶段)医学图像的配准全过程文档及程序
2021年认证杯SPSSPRO杯数学建模 A题 医学图像的配准 原题再现: 图像的配准是图像处理领域中的一个典型问题和技术难点,其目的在于比较或融合同一对象在不同条件下获取的图像。例如为了更好地综合多种信息来辨识不同组织或病变,医生可能使用…...

CV中常用Backbone-3:Clip/SAM原理以及代码操作
前面已经介绍了简单的视觉编码器,这里主要介绍多模态中使用比较多的两种backbone:1、Clip;2、SAM。对于这两个backbone简单介绍基本原理,主要是讨论使用这个backbone。 1、CV中常用Backbone-2:ConvNeXt模型详解 2、CV中…...

RPC 协议详解、案例分析与应用场景
一、RPC 协议原理详解 RPC 协议的核心目标是让开发者像调用本地函数一样调用远程服务,其实现过程涉及多个关键组件与流程。 (一)核心组件 客户端(Client):发起远程过程调用的一方,它并不关心调…...

dify-plugin-daemon的.env配置文件
源码位置:dify-plugin-daemon\.env 本文使用dify-plugin-daemon v0.1.0版本,主要总结了dify-plugin-daemon\.env配置文件。为了本地调试方便,采用本地运行时环境WSL2Ubuntu22.04方式运行dify-plugin-daemon服务。 一.服务器基本配置 服务器…...
【Python】开发工具uv
文章目录 1. uv install1.1 下载安装脚本来安装1.2 使用pipx安装uv1.3 补充 2. 考虑在离线系统上安装uv2.1 下载并上传安装包2.2 用户级安装uv(~/.local/bin/)2.3 补充 3. uv 管理Python解释器4. uv 管理依赖5. uv运行代码5.1 uv不在项目下执行脚本5.2 u…...
《技术择时,价值择股》速读笔记
文章目录 书籍信息概览技术择时价值择股投资策略投资心态 书籍信息 书名:《技术择时,价值择股:A股投资实战笔记》 作者:二十八画生 概览 技术择时 三种简单方法,教你买在起涨点 趋势行情中的“买点”判断ÿ…...
Python可视化设计原则
在数据驱动的时代,可视化不仅是结果的呈现方式,更是数据故事的核心载体。Python凭借其丰富的生态库(Matplotlib/Seaborn/Plotly等),已成为数据可视化领域的主力工具。但工具只是起点,真正让图表产生价值的&…...
SAP重塑云ERP应用套件
在2025年Sapphire大会上,SAP正式发布了其云ERP产品的重塑计划,推出全新“Business Suite”应用套件,并对供应链相关应用进行AI增强升级。这一变革旨在简化新客户进入SAP生态系统的流程,同时为现有客户提供更加统一、智能和高效的业…...
2025.5.25总结
今天早上刷了会手机,然后下午去刷了一道科目一,限时训练3.5h。遗憾的是,这周只刷了一道题,并没有达成每周两道的目标。 其次,一天下来跟平时的节假日一样,有些小压抑。我也察觉到了自己的情绪。烦心事无非…...

(九)PMSM驱动控制学习---无感控制之高阶滑膜观测器
在之前的文章中,我们介绍了永磁同步电机无感控制中的滑模观测器,但是同时我们也认识到了他的缺点:因符号函数带来的高频切换分量,使用低通滤波器引发相位延迟;在本篇文章,我们将会介绍高阶滑模观测器的无感…...
6个跨境电商独立站平台
1. WP最主题(WPZUI) 官网:http://www.wpzui.com 简介: WP最主题专注于专业WordPress主题开发定制,致力于为用户提供高质量、高性能的WordPress主题。其主题设计注重用户体验和SEO优化,适用于多种网站类型,包括企业站…...
电子电路:电学都有哪些核心概念?
电子是基本粒子,带负电荷。电荷是物质的一种属性,电子带有负电荷,而质子带有正电荷。电荷的单位是库仑。 电流呢,应该是指电荷的流动,单位是安培,也就是库仑每秒。所以电流其实就是电荷在导体中的移动形成的。比如,当电子在导线中流动时,就形成了电流。不过要注意,传…...