《WebKit 技术内幕》之四(2): 资源加载和网络栈

2.Chromium 多进程资源加载

2,1 多进程

        资源的实际加载在各个WebKit移植中有不同的实现。Chromium采用的多进程的资源加载机制。

        ResourceHandle 类之下的部分是不同移植对获取资源的不同实现,Chromium 中是 多进程资源加载 。主要是多个Renderer进程和Browser进程之间的调用栈的主要类来实现的。

        Renderer 进程在网页的加载过程中需要获取资源,但由于安全性(沙箱模型打开后 Renderer 进程没有权限获取资源)和效率(资源共享)的考虑,Renderer 进程的资源获取实际上是通过进程间的通信将任务交给 Browser 进程来完成,Browser 进程有权限从网络或者本地获取资源。

        在Chromium架构的Renderer进程中,ResourceHandleInternal类通过IPCResource-LoaderBridge类同Browser进程通信,IPCResourceLoaderBridge类继承自ResourceLoaderBridge类,其作用是负责发起请求的对象和回复结果的解释工作,实际消息的接收和派发交给ResourceDispather类来处理。

        在Browser进程中,首先由ResourceMessageFilter类来过滤Renderer进程的消息,如果与资源请求相关,则该过滤转发给请求给ResourceDispatherHostImpl类,随即ResourceDispatherHostImpl类创建Browser进程中的ResourceLoader对象来处理。ResourceLoader类是Chromium浏览器实际的资源加载类,它负责管理向网络发起的请求、从网络接收过来的认证请求、请求的回复管理等工作。因为这其中每项都有专门类来负责,但都是由ResourceLoader类统一管理,从网络或者本地文件读取信息的是URLRequest类,实际上它承担了建立网络链接、发送请求数据和接受回复数据的任务,URLRequest之后的工作将在“网络栈”内容中介绍。

2.2 工作方式和资源共享        

        资源请求有同步和异步两种方式,ResourceLoader类承担了Browser进程中有关资源的总体管理任务,对于同步和异步两种资源请求方式,ResourceLoader类使用SyncResourceHandle类和AsyncResourceHandle类来向Renderer进程发送状态消息,并接收Renderer进程对这些消息的反馈。
        图中ResourceHandle子类:第一个是LayeredResourceHandle类,它同SyncResourceHandle类和AsyncResourceHandle类不一样,自己不直接参与资源的处理,而是将处理转给另一个ResourceHandle对象。LayeredResourceHandle类没有实际意义,仅是BufferedResourceHandle的父类。该缓冲网络或者文件传过来的数据,直到数据足够满足需求然后转给设置的另一个ResourceHandle对象。Throttling-ResourceHandle类是在面对很多个资源请求时仅使用一个URLRequest对象来获取资源,这可以有效地减少网络的开销,因为不需要重新建立多个网络连接。

此外,在Chromium中还有很多ResourceHandle的子类,它们的作用各异:

  • Redirect T哦File Resource Handler:继承自LayeredResourceHandle类,在接收到数据转给给另一个ResourceHandler类的同时,转存到文件。
  • Stream Resource Handler:继承自LayeredResourceHandle类,在接收到数据转给另一个ResourceHandler的同时,转存到数据流。
  • CertificateResourceHandler:主要处理证书类1资源请求。

        资源统一交给 browser 进程处理,使得网页间的资源共享容易。多个renderer进程、renderer进程的请求多,使得browser进程需要调度器,即chromium中的ResourceScheduler。
        ResourceScheduler 根据 URLRequest 的标记和优先级来调度,URLRequest 中有ID来识别是哪个renderer进程。 ResourceScheduler类中有一个哈希表,该表按照进程来组织URLRequest对象,对于以下类型的网络请求,立即被Chromium发出:(1)高优先级的请求;(2)同步请求;(3)具有SPDY(一种新协议)能力的服务器.。相关的代码都在“content/browser/loader”下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/331926.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SystemVerilog验证测试平台

2.2定宽数组 相比于 Verilog1995中的一维定宽数组, System verilog提供了更加多样的数组类型,功能上也大大增强。 2.2.1定宽数组的声明和初始化 Verilog要求在声明中必须给出数组的上下界。因为几乎所有数组都使用0作为索引下界,所以 System verilog允许只给出数组宽度的便捷声…

华为DHCP配置

1. 全局地址池和接口地址池的应用场景有什么不同呢? 答:接口地址池适用于当前接口只给DHCP client分配与接口同一网段的IP地址的场景。 全局地址池可以给DHCP Client分配与接口同网段的IP地址,也可以分配不同网段的IP地址(DHCP中…

Python爬虫 - 网易云音乐下载

爬取网易云音乐实战,仅供学习,不可商用,出现问题,概不负责! 分为爬取网易云歌单和排行榜单两部分。 因为网页中,只能显示出歌单的前20首歌曲,所以仅支持下载前20首歌曲(非VIP音乐&…

滑动窗口经典入门题-——长度最小子数组

文章目录 算法原理题目解析暴力枚举法的代码优化第一步初始化第二步right右移第三步left右移 滑动窗口法的代码 算法原理 滑动窗口是一种在序列(例如数组或链表)上解决问题的算法模式。它通常用于解决子数组或子字符串的问题,其中滑动窗口表示…

【Redis】Redis基础

Redis基础 初识Redis 认识NoSQL SQL:结构化查询语言 > 关系型数据库 NoSQL:非关系型数据库 SQL与NoSQL的差异: 数据结构 SQL结构化:表的信息依赖于表的结构NoSQL非结构化:存储的信息为KV形式 数据关联 SQL关联…

Android NDK Crash信息收集捕获和日志异常定位分析(addr2line)

Android NDK 闪退日志收集与分析 我们在开发过程中,Android JNI层Crash问题或者我们引用的第三方.so库文件报错,都是一个比较头疼的问题。相对Java层来说,由于c/c++造成的crash没有输出如同Java的Exception Strace堆栈信息,所以定位问题也是个比较艰难的事情。 Google Br…

Nomogram文献分析:提取数据

前言 今天教大家如何分析Nomogram类型的文章,并使用我们开发的系统零代码提取数据。 系统地址:https://clinicaldata.fun/ 要分析的文章:https://pubmed.ncbi.nlm.nih.gov/36504658/ 。这是一篇典型的mimic-iii数据分析的套路,…

智能小程序开发项目步骤流程

快速开始 在开发小程序之前,请确保电脑上已经安装node运行环境。可前往Node.js官网(opens in a new tab)下载安装。智能小程序环境搭建和面板小程序一致,请参考面板小程序搭建环境指南。 开发小程序的流程: 使用涂鸦开发者 IoT 账号登录 T…

c语言-结构体内存对齐

文章目录 前言一、结构体内存对齐总结 前言 本篇文章介绍结构体内存对齐。 一、结构体内存对齐 定义两个结构体: struct S1 {char c1;int i;char c2; };struct S2 {char c1;char c2;int i; }; //输出结构体大小 int main() {printf("%u\n", sizeof(st…

未来能源转型之路:2023年第十三届中国国际储能大会启示录

在2023年第十三届中国国际储能大会上,全球各地的能源专家、学者和企业代表齐聚一堂,共同探讨了储能技术在推动能源转型中的重要作用。对于我们普通人来说,从这场大会中可以学到什么呢? 一、储能技术是未来能源发展的关键 随着可再…

李沐《动手学深度学习》线性神经网络 softmax回归

系列文章 李沐《动手学深度学习》预备知识 张量操作及数据处理 李沐《动手学深度学习》预备知识 线性代数及微积分 李沐《动手学深度学习》线性神经网络 线性回归 目录 系列文章一、softmax回归(一)问题背景(二)网络架构&#xf…

win11启动docker desktop报错 docker desktop unexpected wsl error

win11启动docker desktop报错 docker desktop unexpected wsl error 解决方式, 第一步:控制面板-启动或关闭windows功能窗口勾选下面两个框框 第二步:执行我下面这些命令,不需要重启电脑

Linux:shell脚本:基础使用(7)《exit和break》

exit是结束脚本,不论在脚本任何地方使用,这个脚本就会立马结束,不会继续执行后面的所有命令 break 是结束循环,break只能在循环中使用,并且只对距离自己最近的循环生效,如果循环嵌套循环那么break在哪个循环…

js菜单隐藏显示

1、树状结构对应的表: 2、生成menulist的SQL语句 select {"id":"MenuID","parent":"ParentID","FirstLvMenu":"FirstLvMenu", "text":"MenuName","url":"MenuUrl",&quo…

Linux基础命令和文件操作理解

1.基础命令 快捷键 ctrl alt t 打开终端 ctrl e 跳转终端输入的末尾 ctrl u 清除一行的命令数据 ctrl a 跳转到终端命令开头 ctrl l 清除整个屏幕,不包括当前行 ctrl r 搜索命令 开启历史模式 寻找最近记录的命令:↑ ↓ 移动光标位置 :← →…

游戏《泰坦陨落2》msvcr120.dll丢失的多种解决方法分享

在Windows 11操作系统环境下,众多玩家在体验《泰坦陨落2》这款备受瞩目的射击游戏时,遭遇了一个令人困扰的技术问题:系统提示缺失msvcr120.dll文件。这一关键的动态链接库文件对于游戏的正常运行至关重要,它的缺失直接导致了《泰坦…

拿出最少数目的魔法豆

说在前面 🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。 题目描述 请你从每个袋子中 拿出 一些豆子(也可以 不拿出),使得剩…

基于Python+django影片数据爬取与数据分析设计与实现

目录 一、 前言介绍: 二 、功能设计: 三、功能实现: 系统登录实现 管理员实现 用户模块实现 四、库表设计: 五、关键代码: 六、论文参考: 七、其他案例: 八、源码获取: 一…

fastJson和jackson的日期数据处理

目录 1.jackson 2.fastjson 3.总结 1.jackson jackson是spring mvc默认的JSON解析方法,前端的数据序列化处理之后,后端经过反序列化处理可以直接使用实体对象进行接收。后端接口返回实体对象,经过序列化处理后前端可以接收并进行处理。 …

目标检测--02(Two Stage目标检测算法1)

Two Stage目标检测算法 R-CNN R-CNN有哪些创新点? 使用CNN(ConvNet)对 region proposals 计算 feature vectors。从经验驱动特征(SIFT、HOG)到数据驱动特征(CNN feature map),提高特…