Chrome架构

# Chrome架构

# 进程与线程

一个进程就是一个程序的运行实例——启动一个程序时,操作系统会为该进程创建一块内存,用来存放代码、运行中的数据和一个执行任务的主线程。

线程不能单独存在,它是由进程来启动和管理的

  1. 进程中的任意一线程执行出错,都会导致整个进程的崩溃
  2. 线程之间共享进程中的数据
  3. 当一个进程关闭之后,操作系统会回收进程所占用的内存
  4. 进程之间的内容相互隔离

# 单进程浏览器

早期(2007年之前)的浏览器都是单进程浏览器。 也就是说:页面渲染、页面展现、JavaScript运行环境、插件都运行在一个进程中。这导致了一些问题:不稳定、不流畅、不安全。

  • 不稳定:插件、渲染引擎模块都不稳定,意外崩溃会导致浏览器也跟着崩溃
  • 不流畅:同一时刻只能有一个模块可以执行,独占整个线程;插件、脚本可能会导致页面的内存泄露
  • 不安全:恶意插件、脚本可能会攻击页面

# 多进程浏览器

2008年Google发布了多进程架构的浏览器Chrome

  • 浏览器主进程(下载资源、管理IPC、显示渲染进程生成的图片)
  • 渲染进程(解析、渲染、JavaScript执行、合成网页图片)(渲染进程运行在沙箱sandbox中,不能读写硬盘上的数据,不能获取操作系统权限)
  • 插件进程(运行插件)

进程之间通过IPC进行通信

解决了哪些问题:

  1. 不稳定:进程间相互隔离,一个页面或插件崩溃不会使其他页面与浏览器崩溃
  2. 不流畅:不同页面在不同渲染进程中运行
  3. 内存泄漏:关闭一个页面,对应的渲染进程也会被关闭,该进程的内容会被系统回收
  4. 不安全:安全沙箱机制

# Chrome的多进程架构

  • 浏览器主进程:负责界面显示、用户交互、子进程管理,同时提供存储等功能
  • GPU进程:UI页面使用GPU绘制
  • 网络进程:负责页面的网络资源加载
  • 渲染进程:将HTML、CSS、JavaScript转换为用户可以与之交互的网页,排版引擎Blink与JavaScript引擎V8都运行在该进程中;Chrome会为每一个Tab标签创建一个渲染进程,并且运行在沙箱模式下
  • 插件进程:复杂插件的运行

但是这也会造成一些问题:

  1. 更高的资源占用
  2. 更复杂的体系架构

# 面向服务的架构

2016年,Chrome团队使用面向服务的架构(SOA, Services Oriented Architecture)的思想设计了新的Chrome架构

将原来的各种模块重构为独立的服务(Services),每个服务可以在独立的进程中运行,访问服务必须使用定义好的接口,通过IPC进行通信。

Chrome最终要把UI、数据库、文件、设备、网络等模块重构为基础服务,类似操作系统底层服务。

上次更新: 2022/4/21 22:21:34