为什么打开一个页面,会有4个进程?

本博客 hjy-xh,转载请申明出处

简单回答

因为打开1个页面,至少需要1个浏览器进程、1个网络进程、1个GPU进程以及1个渲染进程

相关思维导图

前置知识:线程和进程

进程资源分配的最小单元,线程是CPU调度的最小单元。

二者都是一个时间段的描述,是CPU工作时间段的描述,是运行中的程序指令的一种描述,这需要与程序中的代码区别开来。

原因

这个问题与浏览器的发展相关,浏览器是从单进程时代发展到多进程时代。

单进程时代

顾名思义,单进程浏览器是指浏览器的所有功能模块都是运行在同一个进程里,其中包含JS引擎、渲染引擎、网络进程、插件进程、GPU进程等等。

如此之多的功能模块在一个进程中,使得浏览器面临以下的窘境:

  • 不稳定
    插件容易崩溃
  • 不流畅
    所有功能模块都在一个进程中,从线程和进程的关系得知,这意味着同一时刻只有一个模块可以运行,效率不高
  • 不安全
    恶意插件、恶意脚本

多进程时代

这里以Chrome浏览器为例,它也是第一个采用多进程架构的浏览器,这个架构能容许许多个程序同事运行而互不影响

虽然多进程模型提升了浏览器的稳定性、流畅性和安全性,但同样不可避免地带来了一些问题:

  • 更高的资源占用
  • 更复杂的体系结构

关于安全沙箱

采用多进程架构的好处之一是可以使用安全沙箱,沙箱设计的目的是为了让不可信的代码运行在一定的环境中,从而限制这些代码访问隔离区之外的资源,

各个进程的作用

这里仍以Chrome浏览器为例

  • 浏览器进程:主要负责界面显示、用户交互、子进程管理,同时提供存储功能
  • 渲染进程:核心任务就是将HTML、CSS和JavaScript转换为用户可以与之交互的网页(排版引擎Blink、JavaScript引擎V8都是运行在该进程中,默认情况下,Chrome会为每个Tab标签创建一个渲染进程,出于安全考虑,渲染进程都是运行在沙箱模式下)
  • GPU进程:该进程的使用初衷是为了实现3D CSS的效果,只是随后网页、Chrome的UI界面都选择采用GPU来绘制,这使得GPU成为浏览器的普遍需求。最后,Chrome在其多进程架构上也引入了GPU进程。
  • 网络进程:主要负责页面的网络资源加载
  • 插件进程:主要负责插件的运行,因为插件易崩溃,所以需要通过插件进程来隔离,以保证插件进程不会对浏览器和页面造成影响

标题的答案

打开 1 个页面至少需要 1 个网络进程、1 个浏览器进程、1 个 GPU 进程以及 1 个渲染进程,共 4 个;如果打开的页面有运行插件的话,还需要再加上 1 个插件进程。

参考

进程和线程的概念、区别及进程线程间通信

Chrome为什么打开一个页面,会有4个进程?

Chrome架构:仅仅打开了1个页面,为什么有4个进程?