【浏览器工作原理】1. chrome多进程架构理解

927 阅读4分钟

最近开始学习浏览器工作原理,网上的资料比较零散且不体系。正好发现有门课程(浏览器工作原理与实践)不错,整理下学习笔记。

前置知识

在学习浏览器多进程架构前,我们需要先了解下进程与线程。

  • 进程:一个运行程序的实例,也就是启动一个程序的时候,操作系统会为该程序创建一块内存,用来存放代码、运行中的数据和一个执行任务的主线程,我们把这样的一个运行环境叫进程。
  • 线程:不能单独存在,需要进程启动和管理。

在进程中使用多个线程进行并行处理可以提升运算效率。

c39e054fdf067f38f596bb2ccf617953.png 进程与线程之间的关系:

  • 进程中的任意线程出错,会导致整个进程崩溃
  • 线程之间的数据是共享的,进程之间的内容相互隔离
  • 当进程关闭后,操作系统会回收进程所占用的内存

为什么要采用多进程架构

浏览器的多进程架构其实是一步步进化的,一开始浏览器是单进程,导致有一个线程出问题浏览器就会崩溃,例如很早的浏览器一个页面挂了其他页面也跟着挂了。

为了解决单进程导致的不稳定、不流畅和不安全,chrome团队提出了多进程架构。

多进程架构具体是指什么

  • 浏览器进程:负责界面展示、用户交互及子进程管理,同时提供存储功能。
  • 渲染进程:负责将html、js和css转换为网页,排版引擎Blink和JavaScript引擎在该进程中。
  • GPU进程:负责css 3D、网页及chrome的UI界面的绘制。
  • 网络进程:负责网络资源的加载。
  • 插件进程:负责插件的运行。

目前多进程架构缺点是什么

  1. 更高的资源占用:因为每个进程都包含公共的基础结构的副本(JavaScript运行环境)
  2. 更复杂的体系架构:各模块耦合度高、扩展性差,新的需求难以适用

未来面向服务的架构

Chrome 官方团队使用"面向服务的架构"(Services Oriented Architecture,简称 SOA)的思想设计了新的 Chrome 架构,各种模块会被重构成独立的服务。

每个服务都可以在独立的进程中运行,访问服务必须使用定义好的接口,通过 IPC 来通信,从而构建一个更内聚、松耦合、易于维护和扩展的系统,更好实现 Chrome 简单、稳定、高速、安全的目标。

image.png

理论结合实践

既然提到多进程架构,那么我们如何查看页面有哪些进程?

用chrome打开一个任意页面,点击浏览器右上角,弹出下拉菜单选择更多工具,然后再选择任务管理器即可。如图所示:

da83f6e30389bbb495ea634d0895bdaf.png

一般包括:浏览器进程、渲染进程、GPU进程和网络进程,如果安装了扩展或者插件还会有插件进程和扩展进程,另外还有v8代理解析工具等进程。

当我们再次打开一个新的页面时,发现渲染进程增加了?

这是因为Chrome会为每个Tab标签创建一个渲染进程,防止一个页面崩溃不影响其他页面。

扩展:

1:如果页面里有iframe的话,iframe也会运行在单独的进程中

2:如果页面里有插件,同样插件也需要开启一个单独的进程

3:如果你装了扩展的话,扩展也会占用进程

4:如果2个页面属于同一站点的话,并且从a页面中打开的b页面,那么他们会公用一个渲染进程(除非特殊处理掉引用关系)

总结

一句话:多进程浏览器架构包括1个浏览器进程、1个网络进程、1个GPU进程、多个渲染进程和多个插件进程。

通过本文了解了浏览器多进程架构的来龙去脉,这也是了解浏览器工作原理的第一步。