bilibili技术文章chrome多进程模型学习笔记

csdn就是我的电子记事本 侵删

当八股看一看 前两天多益笔试问了 答不出来/(ㄒoㄒ)/~~

chrome多进程模型

browser 负责游览器chrome的部分,包括导航栏 书签 前进和后退按钮。同时这个进程还hi控制看不到的部分,包括网络请求的发送和文件的读写

renderer 默认每个tab都会开启一个渲染进程 主要负责我们的html解析 js的执行

plugin 主要负责插件的1运行 因为我们每个人都可以编写插件 chrome为了不使插件的泵秋葵影响到整个游览器 它给每个插件都开启了一个独立的进程

GPU chrome刚开始发布的时候时没有GPU进程的 而GPU的使用初中时为了实现3D CSS效果 只是随后网页 chrome的ui界面都选择了采用GPU来绘制 知识的GPU成为游览器的普遍需求

还有

拓展线程

工作线程

在游览器右上角更多工具任务管理器能看每个进程使用的cpu和内存使用情况

chrome多线程构架的优略

1.多线程可以让游览器有很好的容错性 假如有三个窗口 一个崩溃时 关闭它其他窗口不受影响

全都在一个进程下的话 就会连带一起挂掉

2.提供安全性和沙盒性 操作系统提供方法限制每个进程的能力

缺点 每个进程有各自独立的空间 占用大量内存

改进:

1.为了节省内存 chrome会限制被启动的进程数目 达到一定的界限之后 chrome会把访问同一个网站的tab都放在一个进程里面

2.当chrome在性能好的设备时 会将游览器相关的服务放进不同的进程提高程序的稳定性 如过性能不好 就会放到同一个进程减少内存占用

从url到页面显示做了什么工作

1.处理输入 如果不是url会调用默认搜索引擎

2.开始导航 在输入了url地址的情况下 ui线程会将网络线程初始化为网络请求来获取相应 如dns寻址 tcp三次获取 arp寻址

3.读取响应 如果收到301会告知ui线程 会发起一个新的网络请求 如果是数据内容 先检测 如果是压缩文件 会交给下载管理器

4.寻找渲染进程 如果相应主体是html文件 会对内容做安全检测 寻找渲染进程

5.提交导航 游览器进程会通过ipc告诉渲染进程提交本次导航 除此之外游览器进程还会经接受到的数据传递给对应渲染进程 一旦游览器进程厚道渲染线程的回复导航被提交 导航过程结束 导航栏刷新 生成tab的会话历史

6.渲染进程继续接受数据并解析

渲染进程的进程

主线程 负责html css 和js执行

合成线程 分割生成帧数据 接受用户事件

光栅线程池

几个工作线程 web worker service worker

主线程任务 转化字符流 词法分析 生成token序列(将识别出来的资源地址 提前交给网络线程加载)语法分析 解析html 生成DOM树 解析css规则生成css树 

生成dom树后 结合dom树和css规则树生成布局树

主线程 遍历dom树结合css规则树 确定dom节点的计算样式

在遍历一次dom树 根据dom节点的计算样式计算出一个布局树 布局树有页面上的x y 和盒子的大小等具体信息 

display:none的节点不hi在布局树上 visibility:hidden的节点会在布局上

如果有伪元素节点是显示的 他会在布局树上 不会在dom树上

接着绘画阶段由布局树生成绘画树  绘画纪录是对绘画过程的一个记录 先画什么 再画什么 布局树比绘画树多很多节点

假设由两个并列节点 a b 负margin来把它们设置为重叠 背景会重叠 但是文字不会重叠 因为没有它们没有满足生成绘画层的要求 没有生成自己的绘画层 

要生成自己的绘画层要满足以下条件

1.页面的根对象

2.具有显式的css位置属性 相对 绝对 或者转化

 3.透明的

4.有css过滤器

5.有webgl上下文 或者加速二维上下文的canvas元素

6.video元素

合成阶段

由绘画树生成图形树 每个图形层 就是常说的合成层

只有满足特殊条件的绘画层 才能生成自己图形层

要生成独立的合成层(合成层跟图形层 绘画层什么关系

1.具有三维或者透视变化css属性

2.层由使用加速视频解码的video元素使用

3.层由具有3d上下文和加速2D上下文的canvas元素使用

4.层用于合成插件

5.层使用css动画作为其不透明度 胡哦使用动画webit变换

6.层使用加速css过滤器

7.层的子体是合成层

8.层与合成层重叠 再其上渲染

向will-change:transform

ta=ransform:translate3d(0,0,0)

css3动画在实行时 其实知识移动对应的图形层

合成线程任务

分割 栅格化 绘画四边形 合成帧

弹幕实现原理

你了解chrome游览器内核吗 为什么它要用多进程模型 能说一说各个进程有什么作用吗

Chrome浏览器采用多进程架构,主要是为了提高浏览器的稳定性、安全性和性能。每个进程都有自己独立的内存空间,相互之间不会相互干扰,如果一个进程崩溃了,其他进程不会受到影响。

下面是Chrome浏览器中各个进程的主要作用:

浏览器进程:浏览器的主进程,主要负责协调、控制其他子进程的工作,以及处理浏览器界面和用户交互。在Windows中,一个Chrome浏览器只有一个浏览器进程。

渲染进程:负责将网页内容解析和渲染成用户界面,一个Tab页对应一个渲染进程,每个进程都有独立的进程沙箱。如果一个Tab页出现问题,只会影响到当前Tab页,不会影响到其他Tab页以及浏览器本身。

GPU进程:负责处理浏览器中与GPU相关的任务,例如3D渲染等。

插件进程:负责运行插件,例如Flash插件。

存储进程:负责处理与本地存储相关的任务,例如localstorage、IndexedDB等。

扩展程序进程:负责运行扩展程序。

除了以上主要的进程之外,还有一些负责网络请求、下载等任务的进程,它们的作用是为了减轻主进程的负担,提高浏览器的性能和稳定性。
有什么缺点和改进

Chrome浏览器多进程模型的优点是可以提高浏览器的稳定性和安全性,同时也能够实现更好的资源管理和多任务处理。但是,也存在一些缺点和需要改进的地方,主要包括:

多进程模型会占用更多的系统资源,导致浏览器性能下降,特别是在低端设备上。

多进程模型会增加进程间通信的开销,导致浏览器整体的性能和响应速度变慢。

在多进程模型下,同一个页面的不同进程之间可能存在资源隔离问题,比如在一个进程中修改了页面的某个状态,但是其他进程并不能立即感知到。

当一个进程出现异常或者崩溃时,整个浏览器都会受到影响,甚至会导致整个浏览器崩溃。

为了解决这些问题,Chrome浏览器团队也在不断地进行改进和优化。比如通过对资源的共享和管理来减少进程之间的开销,同时也在开发更加高效的进程间通信机制。此外,也在研究如何通过更加精细的进程控制来提高浏览器的性能和响应速度,以及更好地保护用户隐私和安全。



chrome是怎么改进这些缺点的呢

Chrome 通过以下方式改进了多进程模型的缺点:

进程分配策略的优化:Chrome 会将相同域名的页面分配到同一个进程,这样可以减少进程的数量,降低系统资源的占用。同时,Chrome 还支持将新开的页面与原有页面共享进程,减少资源的浪费。

进程间通信的优化:Chrome 采用了多种进程间通信技术,例如 Shared Memory、Named Pipes、Message Passing 等,提高了进程间通信的效率。

进程的细化管理:Chrome 将浏览器进程细化成多个子进程,包括渲染进程、插件进程、GPU 进程、网络进程等,每个子进程都有对应的功能和权限,可以进行更精细的管理和控制。

资源占用的优化:Chrome 采用了多种技术来减少系统资源的占用,例如进程的延迟创建、内存共享、进程的合并和关闭等。这些技术可以帮助Chrome更好地管理进程,避免系统资源的浪费。

总的来说,Chrome 对多进程模型进行了细致的优化和改进,既提高了浏览器的性能和稳定性,也减少了系统资源的占用。



这体现了了什么设计思想 给了什么样的启示

Chrome使用多进程模型体现了操作系统中进程和线程的概念,并且采用了一些设计思想:

隔离性:每个进程之间相互隔离,互不影响,可以更好地保证稳定性和安全性。

并发性:每个进程之间并行执行,不会出现阻塞,提高了浏览器的响应速度。

模块化:将浏览器的不同功能模块拆分成不同的进程,易于维护和扩展。

这些设计思想启示我们在设计应用程序时需要考虑隔离性、并发性和模块化,尤其在涉及到复杂的系统时更加重要。同时,多进程模型的使用也提醒我们要注意资源消耗和进程间通信的效率问题。



对于其他游览器内核chrome有什么优点

相对于其他浏览器内核,Chrome内核有以下优点:

更高的稳定性和可靠性:Chrome采用了多进程架构,如果其中一个进程崩溃了,不会导致整个浏览器崩溃,从而提高了浏览器的稳定性和可靠性。

更快的速度:Chrome采用了V8 JavaScript引擎,这是一种专门为执行JavaScript代码而设计的引擎,具有高性能和快速响应的特点,从而使得Chrome具有更快的速度。

更好的安全性:Chrome内核在安全性方面也有很多优化,它采用了Sandbox技术,可以限制网页的访问权限,防止恶意网站攻击用户计算机。

更好的用户体验:Chrome内核采用了简洁、清晰的用户界面设计,用户可以更加方便、快捷地使用浏览器。

总之,Chrome内核在多进程架构、JavaScript引擎、安全性和用户体验等方面都有很多优点,这些优点也给其他浏览器内核带来了启示,促进了浏览器内核的发展和改进。



介绍一下safari游览器

Safari是苹果公司开发的一款网页浏览器,最初是为苹果的Mac OS X操作系统开发的,后来也被移植到了iOS系统上。Safari是一款快速、高效、用户友好的网页浏览器,其主要特点包括以下几个方面:

用户友好:Safari的用户界面简洁、直观,操作简单易用,容易上手。

性能卓越:Safari使用了许多先进的技术,如预取技术、JavaScript加速器、硬件加速等,使其在性能方面表现出色。

安全性高:Safari对网页内容进行了全面的安全检查,防范了各种网络攻击,保护了用户的隐私和安全。

支持HTML5和CSS3:Safari支持HTML5和CSS3标准,可以显示最新的网页特效和动画效果,提供更好的用户体验。

支持iCloud同步:Safari支持iCloud同步,可以将书签、历史记录、密码等数据同步到其他苹果设备上,方便用户的使用和管理。

总体来说,Safari是一款功能丰富、性能卓越、安全可靠的网页浏览器,可以满足用户的各种浏览需求。



有什么进程 进程内有什么线程 它们分别的作用有什么 和chrome游览器有什么区别

Safari是苹果公司开发的一款游览器,它的内核名为WebKit。在Safari中,有多个进程和线程协同工作,各自担负不同的任务。

首先是浏览进程,负责处理用户的输入、渲染页面、插件的运行和JavaScript解释等任务。与Chrome不同的是,Safari的浏览进程只有一个。在这个进程中,包括了多个线程,例如UI线程、JavaScript线程、网络线程、绘图线程等。这些线程都是协同工作的,完成浏览器的各种功能。

其次是插件进程,主要负责运行浏览器中的插件,例如Flash、QuickTime等。与Chrome类似,Safari也为每个插件单独创建一个进程,以保证插件的稳定性和安全性。

再次是Web内容进程,也称为沙盒进程。Safari为每个标签页或窗口都创建一个独立的Web内容进程,用于隔离不同页面的渲染和处理,避免出现一个页面崩溃影响整个浏览器的情况。

相较于Chrome,Safari在进程管理上更加精简,同时也更加注重安全性和稳定性。但是也因此在多核CPU上的利用率不如Chrome高效,同时对于高强度的网页应用,Safari的性能也可能不如Chrome。

总之,Safari和Chrome都采用了多进程和多线程的架构,各自在进程和线程管理上略有不同,但都致力于提供更好的用户体验和更高的安全性。

Chrome的各个进程内有什么线程

在Chrome的多进程架构中,每个进程内部包含多个线程,它们各自负责不同的任务。以下是Chrome各个进程中的主要线程:

浏览器进程(Browser Process):这是Chrome的主进程,负责启动和管理其他进程。它包括以下线程:

GUI线程(UI thread):负责处理用户界面,例如渲染地址栏、书签栏、标签页等。
I/O线程(I/O thread):负责处理文件系统、网络请求等I/O操作。
消息循环线程(Message Loop thread):负责消息循环,处理进程间通信和事件分发。
GPU线程(GPU process thread):负责处理图形相关的任务,例如渲染网页、绘制窗口等。
渲染进程(Renderer Process):每个标签页都在一个单独的渲染进程中运行,它们之间相互隔离。每个渲染进程包括以下线程:

GUI线程(UI thread):与浏览器进程的GUI线程类似,负责处理用户界面。
渲染线程(Render thread):负责处理网页渲染任务,例如解析HTML、CSS、JavaScript、渲染页面等。
事件线程(Event thread):负责处理页面中的事件,例如鼠标点击、键盘输入等。
工作线程(Worker thread):负责处理Web Worker的任务。
视频线程(Video thread):负责处理视频播放相关的任务。
插件进程(Plugin Process):用于运行Chrome插件,每个插件都在一个单独的插件进程中运行。

GPU进程(GPU Process):与浏览器进程的GPU线程类似,负责处理图形相关的任务,例如渲染网页、绘制窗口等。

相对于其他浏览器,Chrome的多进程架构更加稳定和安全,因为每个进程相互隔离,一个进程崩溃不会影响其他进程的运行。同时,Chrome可以更好地利用多核处理器,提高浏览器的性能。


2 / 2



游览器进程和渲染进程之间是怎么通信的 

在Chrome浏览器中,游览器进程和渲染进程之间通过进程间通信(IPC)进行通信。IPC是一种进程间通信的机制,允许在不同进程之间传递数据和信号。

Chrome浏览器中,游览器进程和渲染进程之间通过IPC进行通信,主要是通过Chrome提供的消息机制实现的。具体来说,游览器进程和渲染进程通过Chrome提供的IPC通道,可以发送和接收消息。游览器进程可以向渲染进程发送消息,比如打开新的页面、更新页面状态等。渲染进程也可以向游览器进程发送消息,比如请求资源、获取页面状态等。

在通信过程中,游览器进程和渲染进程可以通过消息队列进行异步通信,也可以通过IPC的同步方式进行通信。不同的进程之间的通信是相互独立的,这样就能够保证在一个进程出现问题时,不会影响其他进程的正常运行。同时,通过IPC进行通信,也能够保证数据的安全性和隔离性。


详细介绍一下ipc

IPC(Inter-Process Communication,进程间通信)是指在多进程环境下,进程之间传递数据和消息的一种机制。在操作系统中,每个进程都有自己的独立的地址空间,因此,进程之间无法直接访问对方的变量和数据。IPC提供了一种解决方案,让不同进程之间可以互相传递数据、消息和信号。

常见的IPC机制有:

1.管道(Pipe):管道是一种半双工的通信方式,数据只能在一个方向上流动。进程可以通过一个管道向另一个进程发送数据,也可以从另一个进程接收数据。管道一般用于父子进程间通信。

2.消息队列(Message Queue):消息队列是一种全双工的通信方式,可以在不同进程之间传递数据和消息。消息队列实现了进程间的异步通信,发送进程无需等待接收进程的回应。

3.共享内存(Shared Memory):共享内存是指多个进程共享同一块内存空间,进程可以在共享内存中读写数据。共享内存通常是一种高效的IPC方式,因为数据无需在不同进程之间复制,而是直接在共享内存中读写。

4.信号量(Semaphore):信号量是一种用于进程间同步和互斥的机制。一个进程通过信号量请求操作,另一个进程通过信号量响应操作,通过信号量的加减操作,实现不同进程之间的同步和互斥。

在Chrome浏览器中,不同进程之间主要通过消息传递机制进行通信。例如,当用户在地址栏中输入URL时,浏览器进程会向网络进程发送一个URL加载请求消息,网络进程接收到消息后会开始加载URL,并将请求结果返回给浏览器进程。在这个过程中,浏览器进程和网络进程通过IPC机制传递消息,实现了进程间的通信。



在导航的过程中如果不是url地址 ui线程会怎么做

在导航的过程中如果不是 URL 地址,UI 线程会根据浏览器的设计和开发者的实现不同而有所不同。

通常情况下,如果导航的目标不是 URL 地址,浏览器会将其视为搜索关键字,然后将其发送到默认搜索引擎,获取搜索结果并在新的页面中呈现它们。

如果在导航的过程中,UI 线程遇到无法处理的情况,例如无效的 URL 地址或网络错误,它通常会显示错误页面或提供错误提示,并在后台记录日志以供分析和修复。



在发送到默认搜索引擎这一步 什么线程做了什么工作

在发送到默认搜索引擎这一步,主要的工作是由网络线程完成的。具体来说,当用户在地址栏输入要搜索的内容并按下回车键后,UI线程会把搜索请求发送给浏览器内部的网络线程,网络线程会向默认搜索引擎的服务器发送请求,并接收服务器返回的结果。

网络线程是专门负责处理网络请求和响应的线程,它负责管理网络连接、发送和接收数据等工作。由于网络请求通常需要等待服务器响应,这些操作都是异步执行的,因此网络线程通常使用回调函数或事件通知来处理异步操作的结果。在接收到搜索结果后,网络线程将结果返回给UI线程,然后UI线程会负责渲染搜索结果页面并将其显示给用户。

需要注意的是,在发送请求之前,还需要进行一些操作,例如DNS解析、建立TCP连接等,这些操作会涉及到系统调用,因此网络线程通常也要与操作系统进行交互,通过系统调用来执行这些操作。



arp寻址是什么有什么用

ARP全称为Address Resolution Protocol,是一种用于将IP地址解析成物理地址的协议。在TCP/IP协议栈中,每个主机都有自己的IP地址和MAC地址。在局域网中,如果主机A要向主机B发送数据包,首先需要知道主机B的MAC地址。此时,主机A会发送一个ARP请求广播,请求网段内的所有主机告诉它们的MAC地址。如果主机B在线,它就会响应ARP请求,告诉主机A它的MAC地址。这样,主机A就可以将数据包发送给主机B了。

ARP寻址的作用是实现网络通信中的地址解析,它是TCP/IP协议栈中的重要组成部分。ARP协议的运行过程会在局域网中产生一些广播流量,这会增加网络的负载。因此,在设计网络架构时,需要合理地划分网络地址,减少广播流量的产生,提高网络的性能。



详细的说一下渲染进程

渲染进程是Chrome浏览器架构中的一个重要组成部分,它负责处理页面的渲染、交互和JavaScript执行等任务,是Chrome浏览器的核心组件之一。渲染进程的主要作用是将HTML、CSS和JavaScript等页面资源转换成可视化的网页,并负责处理与页面相关的交互事件。

渲染进程是Chrome浏览器中的多线程模型,它包括了主线程和多个工作线程,其中主线程负责处理页面的布局和渲染,而工作线程则负责处理JavaScript执行和页面事件等任务。在渲染进程中,主线程通过调度工作线程来完成渲染任务,这种方式可以提高浏览器的性能,保证页面的流畅度和响应速度。

渲染进程中的工作线程可以分为以下几种类型:

GUI渲染线程:负责渲染页面的UI界面,将HTML、CSS和JavaScript等页面资源转换成可视化的网页,并负责处理与页面相关的交互事件。

JavaScript解释器线程:负责解释和执行JavaScript脚本,将脚本转换成可执行的代码,并处理与JavaScript相关的事件和消息。

定时器线程:负责管理页面中的定时器,当定时器到期时会向JavaScript解释器线程发送事件通知。

事件触发线程:负责处理页面中的各种事件,例如鼠标点击、滚动等操作,当事件触发时会将事件发送到JavaScript解释器线程处理。

异步http请求线程:负责处理页面中的异步http请求,例如ajax请求等,当请求完成时会将请求结果返回给JavaScript解释器线程。

渲染进程是Chrome浏览器中最复杂的组件之一,它的设计和实现可以提高浏览器的性能和稳定性,同时也能够提高页面的渲染效率和交互体验。



渲染进程中哪些线程做了关于网络的工作 分别对应网络的哪个层

在渲染进程中,主要有以下几个线程处理与网络相关的工作,分别对应于网络的不同层:

网络线程(Network Thread):负责执行所有的网络操作,如HTTP请求和DNS解析等,属于传输层。
IPC线程(IPC Thread):负责渲染进程和浏览器进程之间的通信,如发送和接收IPC消息,属于传输层。
数据库线程(Database Thread):负责处理Web SQL和IndexedDB等数据库操作,属于应用层。
Worker线程(Worker Thread):在浏览器提供的子线程中运行JavaScript,以便在不影响主线程的情况下进行计算密集型操作,属于应用层。
这些线程协同工作,共同完成渲染进程的网络相关任务。例如,当渲染进程需要发送HTTP请求时,网络线程会负责发送请求并接收响应数据,IPC线程则会将响应数据传递给渲染进程,而数据库线程则可能会将响应数据存储到IndexedDB中。



web worker 和service worker线程有什么用

Web Worker和Service Worker都是JavaScript的多线程实现,可以让JavaScript代码在单独的线程中运行,从而不会阻塞UI线程的执行。它们的作用不同:

Web Worker线程:Web Worker可以让JavaScript代码在后台运行,以避免阻塞UI线程,从而提高Web应用的响应性能。Web Worker可以执行一些计算密集型的任务,例如图像处理、数据分析等,从而不影响用户与应用程序的交互。
Service Worker线程:Service Worker是一种在Web应用程序和网络之间运行的脚本,它可以缓存Web应用程序的资源,从而提高应用程序的响应速度和离线访问能力。Service Worker可以拦截网络请求,并从缓存中返回响应,从而提高应用程序的响应速度。它还可以在离线状态下向用户显示缓存的内容,从而提高应用程序的离线访问能力。
这两个线程分别运行在Web应用程序的主线程之外,因此它们可以独立地执行自己的任务,而不会阻塞主线程的执行。Web Worker运行在JavaScript执行环境之外的线程中,因此它不会对主线程造成影响。Service Worker则运行在浏览器的后台,即使用户关闭了Web应用程序,它仍然可以继续运行。

Web Worker和Service Worker都是JavaScript多线程的实现,它们分别运行在不同的线程中,提高了Web应用程序的性能和响应能力。它们的作用不同,Web Worker用于执行计算密集型任务,而Service Worker用于提高Web应用程序的响应速度和离线访问能力。


firefox在渲染过程中会和chrome有很大的区别吗

Firefox和Chrome在渲染过程中确实存在一些区别,尽管它们都基于Webkit内核。其中一些区别如下:

渲染引擎:Firefox使用的渲染引擎是Gecko,而Chrome使用的渲染引擎是Blink,两者在一些细节上有所不同。

进程架构:Firefox的进程架构不同于Chrome的多进程模型。在Firefox中,所有的Web内容都运行在一个称为“父进程”的进程中,而Chrome则是将不同的内容隔离在不同的进程中。

CSS渲染:Firefox和Chrome对于CSS的渲染方式也有所不同,例如对于flex布局,两者的实现方式不一样,也会导致渲染结果的差异。

JavaScript引擎:Firefox使用的JavaScript引擎是SpiderMonkey,而Chrome使用的是V8,两者的实现方式也不同,因此在JavaScript的执行效率和特性方面也有所差异。

总之,Firefox和Chrome在渲染过程中有一些不同之处,但它们都遵循Web标准,并提供了优秀的浏览体验。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值