浏览器(chrome)的进程

2020-05-29  本文已影响0人  sisselxie

前端知识庞杂,学了总是忘记,知识不成体系,很多东西只知其然不知其所以然,从chrome进程架构开始逐步系统建立自己的前端知识网络。

浏览器中的网络路程,页面渲染过程,JS执行流程以及web安全理论等这些工作浏览器是怎么组织这些功能呢?Chrome、微软的 Edge 以及国内的大部分主流浏览器,都是基于 Chromium 二次开发而来;而 Chrome 是 Google 的官方发行版,特性和 Chromium 基本一样。所以主要看浏览器(chrome)的进程架构
先看下打开一个页面,浏览器要打开几个进程:


image.png

可以看到打开一个页面浏览器打开5个进程,为什么?

先了解下线程和进程
进程:一个进程就是一个程序的运行实例,占用资源(CPU, 内存)。
线程:一个程序能同时干多件事,这些子任务就是线程
1.线程不能单独存在的,是依托于进程管理和启动的
2.进程中任一进程出错,都会导致进程崩溃
3.线程共享进程中数据
4.进程关闭,操作系统会回收进程所占用内存(不当操作导致的内容泄漏部分内存也会被回收)

单进程浏览器时代:
chrome出现之前的老的浏览器都是单进程的,所有的功能模块都运行在一个进程里,包括渲染引擎 js运行环境 网络 插件 页面等。这就导致单进程浏览器不稳定(插件或JS崩溃,会导致整个浏览器崩溃),不安全(插件运行在一个进程,很容易利用浏览器窃取数据),不流畅(一个线程中,比如一个页面js执行都在时间过长,就会导致其他所有页面假死)。

多进程浏览器时代:


image.png

下面我们来逐个分析下这几个进程的功能:
浏览器主进程:主要负责界面显示、用户交互、子进程管理,同时提供存储等功能。
渲染进程:核心任务是将 HTML、CSS 和 JavaScript 转换为用户可以与之交互的网页,排版引擎 Blink 和 JavaScript 引擎 V8 都是运行在该进程中,默认情况下,Chrome 会为每个 Tab 标签创建一个渲染进程。出于安全考虑,渲染进程都是运行在沙箱模式下。
GPU 进程。其实,Chrome 刚开始发布的时候是没有 GPU 进程的。而 GPU 的使用初衷是为了实现 3D CSS 的效果,只是随后网页、Chrome 的 UI 界面都选择采用 GPU 来绘制,这使得 GPU 成为浏览器普遍的需求。最后,Chrome 在其多进程架构上也引入了 GPU 进程。
网络进程:主要负责页面的网络资源加载,之前是作为一个模块运行在浏览器进程里面的,直至最近才独立出来,成为一个单独的进程。
插件进程:主要是负责插件的运行,因插件易崩溃,所以需要通过插件进程来隔离,以保证插件进程崩溃不会对浏览器和页面造成影响。
Audio进程:主要是负责音频管理。
可以看到,chrome 把越来越多的服务从主进程中独立出来,比例GDP负责3d动画的,Audio负责音频等
这样因为页面的进程相互独立,某一进程崩溃,不会影响其他页面。解决了单进程浏览器不稳定的问题,各干功能模块运行在不同的进程中,这样不会出现阻塞其他的进程的导致的不流畅的问题。渲染进程运行在沙箱中,更安全。

上一篇下一篇

猜你喜欢

热点阅读