本博客 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 个插件进程。