chrome

chrome 是多进程,每个进程中,包含了线程


image.png

一个进程可以要求操作系统启动另一个进程来运行不同的任务。发生这种情况时,会为新进程分配内存的不同部分。如果两个进程需要对话,它们可以使用Inter Process Communication ( IPC )来实现。许多应用程序被设计为以这种方式工作,因此如果一个工作进程没有响应,它可以重新启动而不停止运行应用程序不同部分的其他进程

浏览器的架构

浏览器可以是一个具有许多不同线程,也可以是具有多个通过IPC通信的线程的不同的进程


image.png

进程控制的内容:

浏览器进程(Browser) 控制浏览器的地址栏、书签、前后退按钮,还处理web浏览器不可见的特权部分,例如网络请求和文件访问
渲染进程(Renderer) 控制每个tab下展示的网站
插件进程(Plugin) 控制任何被网站使用的插件,比如flash
GPU 独立于其他进程处理 GPU 任务。它被分成不同的进程,因为 GPU 处理来自多个应用程序的请求并将它们绘制在同一个表面上。

站点隔离

image.png

节省内存

当 Chrome 在强大的硬件上运行时,它可能会将每个服务拆分为不同的进程以提供更高的稳定性,但如果它在资源受限的设备上,Chrome 会将服务整合到一个进程中以节省内存占用。在此更改之前,已在 Android 等平台上使用了类似的整合进程以减少内存使用的方法。

地址栏导航输入

处理输入

当我们在地址栏输入内容时。UI线程首先会询问。这是搜索查询还是URL,在chrome里地址栏也是一个搜索输入字段,所以UI线程需要解析并且决定转到搜索引擎,还是请求的站点地址

开始导航

当用户输入并且点击enter之后,ui线程会发起网络调用获取网站的内容。加载旋转器显示在tab角落,网络线程通过适当的协议,如DNS查找和为请求建立TLS连接
当收到http 301这样的重定向请求,网络线程与UI线程沟通 服务器重定向,将启动另外一个url请求

阅读回复

一旦响应体开始进入,如有必要。网络线程会查看流的前几个字节,响应体里的content-type 头标志了这个数据的类型,如果是html文件,那么下一步将数据传递给渲染器进程,但是如果是一个zip文件活着其他的文件,这将意味着这是一个下载请求,所以会将数据传递给下载管理器

查重一个渲染器进程

一旦所有的检查就绪,并且网络线程确信浏览器应该导航到请求的站点,网络线程就会告诉UI线程,数据准备就绪,UI线程会找到一个渲染器进程来进行网页渲染

多进程

同源的页面会被分配在同一个进程中。而非同源页面会分配一个新的进程

当通过window.open() 打开同一个域名下的页面,会直接使用同一个进程,从chrome 进程管理里可以看得出
image.png
image.png

虽然chrome打开了多个百度,但是不会使用同一个进程,
下面的管理页面是通过window.open()打开就用一个进程,但是如果打开的不同域名的页面,还是单独使用进程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容