【学习记录】Chrome架构:仅仅打开1个页面,为什么有4个进程?

176 阅读3分钟

本文是学习过程中一些简要的记录,不能尽善尽美,如果发现有遗漏或错误的地方,恳请朋友指正,共同成长

进程VS线程

进程与线程的关系

线程是不能单独存在的,它是由进程创建并管理,一个进程可以创建多个线程。进程的概念可以简单理解为一个应用程序,我们可以在windows的任务管理器中查看进程。

进程与线程的关系的4个特点

1.进程中的任意一个线程执行出错,都会导致进程的崩溃

2.线程之间共享进程的数据

线程可以读写进程的公共数据

image.png

3.当一个进程关闭后,操作系统会回收进程所占用的内存

当一个进程退出后,操作系统会回收此进程所占用的内存,即使此进程中的线程发生了内存泄漏,操作系统也能正确回收。

4.进程之间是相互隔离的,但也能通过IPC的机制进行通信

进程之间互不干扰可以保证进程的正常运行,比如我电脑上正在玩LOL游戏,后台播放QQ音乐,假如LOL崩溃以后,QQ音乐还是正常播放。

总结:当我们启动一个应用时,操作系统会分配一块内存,用来存放代码、数据和一个执行任务的主线程,这样的运行环境称为进程。进程和线程的关系简单类比为公司和员工,公司会把项目拆分成一个个小任务分配给不同的员工,每个员工执行它自己的任务,员工之间可以交流配合完成任务,但如果某个员工的任务搞砸了,将会会影响到整个项目的运行,所以线程是进程的最小运行单元。

Chrome的多进程架构

image.png 从图中可以看到,最近的Chrome浏览器包括:1个浏览器主进程、1个网络进程、1个GPU进程、多个渲染进程、多个插件进程

在Chrome中查看进程

image.png

各个进程的功能

  • 浏览器进程浏览器进程。主要负责界面显示、用户交互、子进程管理,同时提供存储等功能。
  • 渲染进程。核心任务是将 HTML、CSS 和 JavaScript 转换为用户可以与之交互的网页,排版引擎 Blink 和 JavaScript 引擎 V8 都是运行在该进程中,默认情况下,Chrome 会为每个 Tab 标签创建一个渲染进程。出于安全考虑,渲染进程都是运行在沙箱模式下。
  • GPU 进程。其实,Chrome 刚开始发布的时候是没有 GPU 进程的。而 GPU 的使用初衷是为了实现 3D CSS 的效果,只是随后网页、Chrome 的 UI 界面都选择采用 GPU 来绘制,这使得 GPU 成为浏览器普遍的需求。最后,Chrome 在其多进程架构上也引入了 GPU 进程。
  • 网络进程。主要负责页面的网络资源加载,之前是作为一个模块运行在浏览器进程里面的,直至最近才独立出来,成为一个单独的进程。
  • 插件进程。主要是负责插件的运行,因插件易崩溃,所以需要通过插件进程来隔离,以保证插件进程崩溃不会对浏览器和页面造成影响。

讲到这里,现在你应该就可以回答文章开头提到的问题了:仅仅打开了 1 个页面,为什么有 4 个进程?因为打开 1 个页面至少需要 1 个网络进程、1 个浏览器进程、1 个 GPU 进程以及 1 个渲染进程,共 4 个;如果打开的页面有运行插件的话,还需要再加上 1 个插件进程。

如果打开2个页面。至少有5个进程:1个浏览器进程 + 1个网络进程 + 1个GPU进程 + 2个渲染进程

参考 浏览器工作原理与实践