Browser进程和浏览器内核(Renderer进程)的通信过程

看到这里,首先,应该对浏览器内的进程和线程都有一定理解了,那么接下来,再谈谈浏览器的Browser进程(控制进程)是如何和内核通信的,

这点也理解后,就可以将这部分的知识串联起来,从头到尾有一个完整的概念。

如果自己打开任务管理器,然后打开一个浏览器,就可以看到:任务管理器中出现了两个进程(一个是主控进程,一个则是打开Tab页的渲染进程)
然后在这前提下,看下整个的过程:(简化了很多)

  • Browser进程收到用户请求,首先需要获取页面内容(譬如通过网络下载资源),随后将该任务通过RendererHost接口传递给Render进程
  • Renderer进程的Renderer接口收到消息,简单解释后,交给渲染线程,然后开始渲染
    • 渲染线程接收请求,加载网页并渲染网页,这其中可能需要Browser进程获取资源和需要GPU进程来帮助渲染
    • 当然可能会有JS线程操作DOM(这样可能会造成回流并重绘)
    • 最后Render进程将结果传递给Browser进程
  • Browser进程接收到结果并将结果绘制出来

这里绘一张简单的图:(很简化)

看完这一整套流程,应该对浏览器的运作有了一定理解了,这样有了知识架构的基础后,后续就方便往上填充内容。

这块再往深处讲的话就涉及到浏览器内核源码解析了,不属于本文范围。

如果这一块要深挖,建议去读一些浏览器内核源码解析文章,或者可以先看看参考下来源中的第一篇文章,写的不错

原文地址:https://www.cnblogs.com/crith/p/9949245.html

时间: 2025-01-17 15:37:57

Browser进程和浏览器内核(Renderer进程)的通信过程的相关文章

前端知识体系(一)浏览器机制以及进程线程的关系

看了一篇大神的博客,对前端学习体系突然明悟了起来.于是准备参考着大神的脚步开始体系化的学习.博客链接:https://segmentfault.com/a/1190000013662126. 很多时候被问到从输入url地址之后,会发生什么?很多时候回答都很笼统,没有自己的核心,所以学习一下大神的思路,以下总结的只是骨干,只有将每一个部分都学习到,这样才是一个知识体系,才能很好的理解上下结构与关系. 1. 从浏览器接收url到开启网络请求线程(这一部分可以展开浏览器的机制以及进程与线程之间的关系)

深入Linux内核架构——进程管理和调度(上)

如果系统只有一个处理器,那么给定时刻只有一个程序可以运行.在多处理器系统中,真正并行运行的进程数目取决于物理CPU的数目.内核和处理器建立了多任务的错觉,是通过以很短的间隔在系统运行的应用程序之间不停切换做到的.由此,以下两个问题必须由内核解决:除非明确要求,否则应用程序不能彼此干扰:CPU时间必须在各种应用程序之间尽可能公平共享(一些程序可能比其他程序更重要).本篇博文主要涉及内核共享CPU时间的方法以及如何在进程之间切换(内核为各进程分配时间,保证切换之后从上次撤销其资源时执行环境完全相同)

第八周 进程的切换和系统的一般执行过程

钱自强 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1. 进程切换在内核中的实现 linux中进程切换是很常见的一个操作,而这个操作是在内核中实现的.这里我们来分析下内核中是如何实现这个操作的. linux内核中的线程切换主要通过schedule()这个函数实现.实现的时机有以下三个时机 中断处理过程(包括时钟中断.I/O中断.系统调用和异常)中,直接调用schedule()

selenium设置user-agent以及对于是否是浏览器内核进行反爬

(Session info: chrome=75.0.3770.90),不同版本方法可能会有些不同 推荐查资料网站必应可以避开一堆广告 一.user-agent设置 from selenium import webdriver # 进入浏览器设置 options = webdriver.ChromeOptions() # 更换头部 options.add_argument('user-agent=ywy') browser = webdriver.Chrome(options=options)

linux内核CFS进程调度策略

一.概述 首先简单介绍一下基本的设计思路, CFS思路很简单,就是根据各个进程的权重分配运行时间(权重怎么来的后面再说). 进程的运行时间计算公式为: 分配给进程的运行时间 = 调度周期 * 进程权重 / 所有进程权重之和   (公式1) 调度周期很好理解,就是将所有处于TASK_RUNNING态进程都调度一遍的时间, 差不多相当于O(1)调度算法中运行队列和过期队列切换一次的时间 (我对O(1)调度算法看得不是很熟,如有错误还望各位大虾指出). 举个例子,比如只有两个进程A, B,权重分别为1

Linux内核分析——进程的描述和进程的创建

Linux内核分析——进程的描述和进程的创建 20135111李光豫 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验内容 阅读理解task_struct数据结构http://codelab.shiyanlou.com/xref/linux-3.18.6/include/linux/sched.h#1235: 分析fork函数对应的内核处理过程sys_clone,理解创建一个新进

Linux 内核开发 - 进程空间

1.1 虚拟内存 Linux 是一个多任务的系统,如果每个任务都独立的占用内存,则实际的物理内存将很快消耗殆尽,实际上对于前台正在运行的任务来说,所需要要的内存并不多,很多任务基本不需要运行,也就没有必要一直占用内存,虚拟内存技术采用硬盘来充当一部分内存,当内存不足时就将不需要在内存中使用的数据搬移到硬盘中去,当任务需要运行时又将硬盘中的数据搬回物理内存. 虚拟内存技术不仅起到了保护操作系统的作用,而且使得用户程序可以使用到比实际物理内存更大的地址空间,屏蔽了实际物理内存对用户地址空间的影响.

Linux内核学习-进程

先说几个术语: 一.Linux进程的五个段 下面我们来简单归纳一下进程对应的内存空间中所包含的5种不同的数据区都是干什么的.重点:代码段.数据段.堆栈段,这是一个概念堆.栈.全局区.常量区,这是另一个概念1)代码段:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存中的镜像.代码段需要防止在运行时被非法修改,所以只准许读取操作,而不允许写入(修改)操作--它是不可写的.代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域.这部分

Linux内核设计第八周 ——进程的切换和系统的一般执行过程

Linux内核设计第八周 ——进程的切换和系统的一般执行过程 第一部分 知识点总结