为什么打开一个页面会启动四个进程

本文最后更新于:2022年4月22日 上午

chrome 为什么打开一个页面会启动四个进程

进程与线程

首先我们要先理解进程与线程的概念

进程

是指计算机中已运行的程序。进程曾经是分时系统的基本运作单位。在面向进程设计的系统(如早期的UNIX,Linux 2.4及更早的版本)中,进程是程序的基本执行实体;在面向线程设计的系统(如当代多数操作系统、Linux 2.6及更新的版本)中,进程本身不是基本运行单位,而是线程的容器。

用户下达运行程序的命令后,就会产生进程。同一程序可产生多个进程(一对多关系),以允许同时有多位用户运行同一程序,却不会相冲突。

进程需要一些资源才能完成工作,如CPU使用时间、存储器、文件以及I/O设备,且为依序逐一进行,也就是每个CPU核心任何时间内仅能运行一项进程。

线程

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

线程是独立调度和分派的基本单位。线程可以为操作系统内核调度的内核线程,如Win32线程;由用户进程自行调度的用户线程,如Linux平台的POSIX Thread;或者由内核与用户进程,如Windows 7的线程,进行混合调度。

同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage)。

进程与线程的区别

进程是计算机管理运行程序的一种方式,一个进程下可包含一个或者多个线程。线程可以理解为子进程。

浏览器中的进程

在早期,浏览器都是单进程的, IE6 时代,整个浏览器都跑在一个进程中,如果当一个页面崩溃时,整个浏览器都会产生崩溃,直到 2008 年 ,google 发布了 chrome 浏览器,开启了 多进程浏览器时代

但是在早期 chrome 中的多进程架构还不到 4个 ,仅仅只有一个 插件进程、渲染进程,和浏览器主进程

最新的浏览器进程架构

  • 浏览器进程
    负责页面显示
    子进程的管理,提供储存等


  • 渲染进程
    主要是将 HTML 和 CSS 转换成用户可以交互的网页,
    渲染引擎 bink 和 js 引擎 v8 都是运行在这个进程下的
    默认情况下 chrome 会为每个 tab 标签开启一个 渲染进程


  • 插件进程
    主要是负责插件的运行,主要是因为插件易崩溃来进行隔离


  • 网络进程
    主要是负责网路资源的加载,之前是作为模块运行在浏览器进程中的,后面把它独立出来,称为一个单独的进程


  • GPU进程
    这个进程早期的 chrome 是没有的,GPU 进程最初是为了实现 css 中的 3D 效果,后来 chrome UI 和网页都采用 GPU 来绘制,所以使得 GPU 进程成为了普遍的需求


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议,转载请注明出处。