浏览器进程&线程、架构

1. 进程&线程

进程( Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。

Summary:

  • 一个进程就是一个程序实体

  • 进程是线程的容器; 线程不能单独存在, 需要由进程来管理

  • 通常说的并行处理,也叫多线程处理,是相对单线程处理而言的

1.1. 关系特点

  • 异常处理: thread 执行出错会导致 process崩溃
  • 数据共享: 同一 process 内的多个 thread 共享数据
  • 内存回收: process 被关闭时, 它占用的所有资源将被回收;内部 thread 引发的内存泄漏会被正确回收处理
  • 外部隔离: process 之间严格隔离; 可使用进程间通信(IPC)的机制通讯

2. Chrome浏览器架构

参考: 李兵-浏览器工作原理与实践

2.1. Chrome架构发展历史

  • 2007及以前: 单进程浏览器时代

    简介: 页面渲染、页面展示、JavaScript环境、插件等都运行在页面线程。页面易卡顿(流畅性)或崩溃(稳定性)、插件和脚本会对页面安全性造成威胁(安全性)

    此外,安全沙箱模式无法在单进程浏览器使用,因为会限制浏览器和操作系统间的文档读写和数据交互

  • 2008年Chrome发布: 早期多进程架构

    简介: 插件进程、渲染进程 和 浏览器主进程相互独立出来,浏览器进程做主控。页面的解析、渲染、JS脚本均存在于渲染进程,且每个页面以沙箱模式单独占用一个渲染进程。

  • 2019前后?: 后期多进程架构

    简介: 新增GPU渲染进程来实现 3D CSS 效果; 网络等功能从主进程独立出来。但占用资源越来越高,体系日益复杂不利于扩展。

    有些浏览器的网络进程是没有独立出来的,而是以网络线程的形式集成在渲染进程中

  • 当前: 面向服务架构SOA( Services Oriented Architecture )

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

    同时 Chrome 还提供灵活的弹性架构,在强大性能设备上会以多进程的方式运行基础服务,但是如果在资源受限的设备上(如下图),Chrome 会将很多服务整合到一个进程中,从而节省内存占用。

2.2. Google Chrome 架构(截止到2021.01.13)

Chrome任务管理器

解析:

  • 浏览器主进程
  • GPU进程
  • Network Service (网络服务进程)
  • 标签页 至少一个
  • 备用渲染进程
  • ⑥ F12控制台 控制台也会独占一个进程, 控制台关闭时进程结束;实际上浏览器是将控制台当做一个标签页来处理的。
  • ⑦ 插件进程(Vue.js devtools)
  • Storage Service 即使页面未启用WebStorage, 该进程也会启动并获得内存空间分配, 不过此时CPU占用为0.0
  • ⑨ Audio Service

Summary:

  • 当打开一个Chrome标签页时, 至少有6个进程启动: 浏览器主进程GPU进程Network ServiceStorage Service备用渲染程序当前标签页进程

  • 插件进程、扩展进程、代理进程、 压缩进程、音频进程、视频进程、 iframe、控制台进程等会视页面具体情况出现

  • 浏览器可以类比成一个操作系统

3. 事件循环系统

略(后续补充)


版权声明:本文为liu_moran原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。