【浏览器原理-1】体系结构

ObjectKaz Lv4

课程链接:https://time.geekbang.org/column/intro/100033601?tab=catalog

进程和线程

基本概念

  1. 进程:一个进程就是一个程序的运行实例。
  2. 线程:并发调度的基本单位。线程是由进程启动和管理的,但它不能单独存在。

几个要点

  1. 进程中的任意一线程执行出错,都会导致整个进程的崩溃。
  2. 线程之间共享进程的数据。
  3. 当一个进程关闭之后,操作系统会回收进程所占用的内存。哪怕是其中某个线程发生了内存泄漏。
  4. 进程与进程之间的内容相互隔离,需要通过 IPC 机制进行通信。

单进程浏览器模型

介绍

顾名思义,单进程浏览器的各个部分都运行在一个进程里。渲染、插件、JavaScript、页面等各个模块则以线程的形式存在。

单进程浏览器一般分为下面的线程:

  • 网络线程
  • 页面线程:页面渲染、展现、JS 执行、插件
  • 其他线程

三大问题

  1. 不稳定:浏览器插件和页面渲染之类的内容很容易崩溃。上面说过,单个线程出错都会导致整个进程的崩溃。如果浏览器有多个标签,那么只要一个标签页崩溃了,整个浏览器也就崩溃了。
  2. 不流畅:
    • 页面之类的代码都集中在一个线程,这意味着同一时间只有一个模块在执行操作。一旦执行一些耗时的 JS 代码,页面会出现卡顿。
    • 页面关闭时,有时候内存没有完全释放,导致内存泄漏,进而导致浏览器卡顿。
  3. 不安全:插件可以执行一些系统级别的操作;而页面和 JS 代码可以通过利用浏览器的安全漏洞来执行一些系统级别的操作。这对于用户电脑是非常危险的。

早期多进程架构

介绍

在这种体系架构里面,一个浏览器运行则拥有多个进程。常见的进程:

  • 插件进程(多个):执行插件的代码
  • 渲染进程(多个):负责页面的解析和渲染,执行 JS 代码。一个页面通常有一个渲染进程。
  • 浏览器主进程:页面展示、用户交互、下载资源、管理文件、管理 IPC 等

其中,插件进程渲染进程 运行在沙箱中,无法直接进行系统级别的操作(如文件读写)。

解决三大问题

  1. 不稳定:不同的页面运行在不同的进程,一个页面崩溃不会影响另一个页面。插件同理。
  2. 不流畅:
    • 不同的页面运行在不同的进程,对应页面如果卡死,只会影响那一个页面,其他页面则不受影响。
    • 同样,一个页面关闭以后,对应的渲染进程就结束了,自然对应的页面就不存在内存泄漏这个问题了。
  3. 不安全:远程代码都是运行在沙箱环境中,恶意代码就无法执行系统基本的操作。

现代多进程架构

目前的 Chrome 浏览器包含以下部分:

  • 1 个浏览器主进程
  • 1 个 GPU 进程
  • 1 个网络进程
  • 多个渲染进程
  • 多个插件进程

其中渲染进程和插件进程运行在安全沙箱下。

各个进程的职责

浏览器进程

  1. 界面显示、用户交互、子进程管理
  2. 提供存储等功能

渲染进程

  1. 核心任务是将 HTML、CSS 和 JavaScript 转换为用户可以与之交互的网页
  2. 排版引擎 Blink 和 JavaScript 引擎 V8 都是运行在该进程中
  3. 默认情况下,Chrome 会为每个 Tab 标签创建一个渲染进程

GPU 进程

  1. 绘制 UI 界面

网络进程

  1. 主要负责页面的网络资源加载

插件进程

  1. 负责插件的运行

多进程架构的缺点

  1. 更高资源的占用:相同的模块可能会被创建多个进程,其中一些公共结构是冗余的。
  2. 更复杂的体系结构:各模块直接耦合性高、可拓展性差。

面向服务的架构

2016 年,Chrome 官方团队使用“面向服务的架构”(Services Oriented Architecture,简称 SOA)的思想设计了新的 Chrome 架构。

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

Chrome 还提供灵活的弹性架构,在强大性能设备上会以多进程的方式运行基础服务,但是如果在资源受限的设备上,会将一些服务整合到一个进程中。

  • 标题: 【浏览器原理-1】体系结构
  • 作者: ObjectKaz
  • 创建于: 2021-11-26 14:59:08
  • 更新于: 2021-12-27 13:43:36
  • 链接: https://www.objectkaz.cn/1c981fb1c673.html
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。