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

news2024/10/3 10:36:23

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”下。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【汽车销售数据】2015~2023年各厂商各车型的探索 数据分析可视化

数据处理的思路: 1 各表使用情况: 汽车分厂商每月销售表,该表主要分析展示top10销量的厂商销量、占比变化情况(柱形图、饼图);中国汽车分车型每月销售量表,该表主要分析展示top20销量的车型销…

五、基础篇 vue列表渲染

在v-for里使用对象用 v-for 把一个数组对应为一组元素 我们可以用 v-for 指令基于一个数组来渲染一个列表。v-for 指令需要使用 item in list形式的特殊语法&#xff0c;其中 list是源数据数组&#xff0c;而 item 则是被迭代的数组元素的别名。 <template><div clas…

Cuda与Torch配置(For 集群服务器)超详细步骤

每次配置模型环境&#xff0c;无论是在windows&#xff0c;linux&#xff0c;集群服务器上都会在这里卡一段&#xff0c;为了未来配置方便&#xff0c;记录下配置注意事项 配置cuda和torch主要有几个要点&#xff0c;分别是&#xff1a; 显卡与驱动&#xff08;NIVIADA drive…

如何实现固定公网地址远程访问本地部署的Termux MySQL数据库

文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前言 Android作为移动设备&#xff0c;尽管最初并非设计为服务器&#xff0c;但是随着技术的进步我们可以将Android配置为生产力工具&#xff0c;变成一个随身…

Arthas项目实战用法

一、简介 1、项目所在位置 2、安装Arthas 1. 下载arthas-boot.jar 2. 运行arthas-boot.jar 3. 选择进程 3、卸载Arthas 二、核心监视功能 1、monitor&#xff1a;监控方法的执行情况 2、watch&#xff1a;检测函数返回值 3、trace&#xff1a;根据路径追踪&#xff0c;…

java转义字符

//转义字符的使用 public class ChangeChar{//编写一个main方法public static void main(String[] args){// \t :一个制表位&#xff0c;实现对齐的功能System.out.println("北京\t天津\t上海");// \n :换行符&#xff0c;实现换行System.out.println("jack\nsm…

【OJ】牛客链表刷题

题目 1. 链表分割1.1 题目分析1.2 代码 2. 链表的回文结构2.1 题目分析2.2 代码 这里两道与链表有关的题目均来自牛客。 1. 链表分割 1.1 题目分析 因为这里代码不能选择用c语言写&#xff0c;所以选择用c,因为c兼容c。 题目要求分割链表&#xff0c;我们可以直接弄成两个带哨…

【笔记】Helm-3 主题-6 Chart仓库指南

Chart仓库指南 本节介绍如何创建和使用chart仓库。在高层级中&#xff0c;chart仓库是打包的chart存储和分享的位置。 社区的Helm chart仓位于 Artifact Hub &#xff0c;欢迎加入。不过Helm也可以创建并运行您自己的chart仓库。该指南将介绍如何操作。 Artifact Hub 先决条…

威士忌的品鉴之旅麦芽制备:从浸泡、发芽到干燥

麦芽制备是威士忌酿造过程中至关重要的一环&#xff0c;它直接影响到产品的品质和风味。麦芽的制备包括浸泡、发芽、干燥等环节&#xff0c;每个环节都需要严格控制温度、湿度和时间等细节。本文将深入探讨麦芽制备的过程&#xff0c;以雷盛537威士忌&#xff0c;分析麦芽制作过…

4人遇难,北京突发火情 富维烟火识别防止悲剧再次发生

在北京一处居民区&#xff0c;一场突如其来的火灾夺走了四条宝贵的生命。火情迅速蔓延&#xff0c;烟雾弥漫&#xff0c;居民们猝不及防。这一悲剧再次提醒我们&#xff0c;火灾预防和早期识别的重要性不容忽视。 在这样的背景下&#xff0c;北京富维图像公司开发的FIS智能图像…

肯尼斯·里科《C和指针》第7章 函数(2)递归

7.5 递归 C通过运行时堆栈支持递归函数的实现。递归函数就是直接或间接调用自身的函数。许多教科书都把计算阶乘和斐波那契数列用来说明递归&#xff0c;这是非常不幸的。在第1个例子中&#xff0c;递归并没有提供任何优越之处。在第2个例子中&#xff0c;它的效率之低是非常恐…

中国多家半导体设备厂表现出色,营收可观 | 百能云芯

多家中国半导体设备大厂近日相继发布了2023年度业绩预告&#xff0c;表现出色&#xff0c;营收和净利润均呈现较大幅度的增长&#xff0c;这一利好消息背后得益于半导体行业周期的复苏以及国产半导体需求的持续增长。 据百能云芯电子元器件商城了解&#xff0c;北方华创发布的公…

域中的主机报错1231解决办法

1、 这个一般是使用 net view /domain 的时候出现的报错&#xff0c;若是报错 6118 只需在域控制器中开启 computer browser 服务即可 2、解决了 6118 问题后&#xff0c;在域控制器上已经能使用 net view /domain 了&#xff0c;但是域中的其它主机上会出现 1231 问题&#xf…

单臂路由【新华三与华为区别】

【技术介绍】单臂路由&#xff0c;简单来讲&#xff0c;就是在一个路由器的物理端口上虚拟几个虚拟端口&#xff0c;从而达到节约资源的效果 【背景】 R1上进行单臂路由 【操作】 【华为】 [HW-SWA] vlan batch 10 20 int g0/0/1 port link-type access port default vlan 10…

揭露欧拉骗局5.构建函数1/n>ln(1+1/n)公开作弊

构建函数又名构造函数&#xff0c;是欧系数学的重要解题方法。构建函数最成功的范例是“1/n&#xff1e;ln(11/n)”&#xff0c;它来自欧拉&#xff0c;其手段极其卑劣下作&#xff01;随心所欲、目空一切是欧拉的习惯 欧拉证明1/n&#xff1e;ln(11/n)的操作有两步&#xff1…

【陈老板赠书活动 - 22期】- 人工智能(第三版)

陈老老老板&#x1f9d9;‍♂️ &#x1f46e;‍♂️本文专栏&#xff1a;赠书活动专栏&#xff08;为大家争取的福利&#xff0c;免费送书&#xff09; &#x1f934;本文简述&#xff1a;活就像海洋,只有意志坚强的人,才能到达彼岸。 &#x1f473;‍♂️上一篇文章&#xff…

阿里云ack集群管理及故障处理

一、集群管理维护 二、常见故障处理 存储&#xff1a; 网络 弹性伸缩 service

头像空白问题

当用户没有设置头像时&#xff0c;我们可以使用用户名第一个字来当头像 主要涉及一个截取&#xff0c;截取字符串第一个字 变量名.charAt(0) 如果变量名为null或者undefine 那么就会报错 使用可选链操作符 &#xff1f; 当前面的值为nul或undefine时&#xff0c;就不会执行…

MySQL深度分页优化问题

☆* o(≧▽≦)o *☆嗨~我是小奥&#x1f379; &#x1f4c4;&#x1f4c4;&#x1f4c4;个人博客&#xff1a;小奥的博客 &#x1f4c4;&#x1f4c4;&#x1f4c4;CSDN&#xff1a;个人CSDN &#x1f4d9;&#x1f4d9;&#x1f4d9;Github&#xff1a;传送门 &#x1f4c5;&a…