打开 chrome,一次性打开了 5 个进程?!
先解释一下为什么会有这么多个进程,再说为什么需要创建这么多进程。
那是因为现代浏览器采用的都是 多进程浏览器
,每个进程处理一个任务。以chrome
浏览器为例,打开一个 chrome
浏览器最少会产生 4
个进程,分别是:
1. 浏览器进程
2. 网络进程
3. GPU 进程
4. 页面进程(正常情况下一个页面一个进程,特殊情况下面详细讲)5. 插件进程(如果有插件的话,一个插件一个进程)
详细如下图:(如何查看下图这种详细的进程,chrome 右上角三个点 –> 更多工具 –> 任务管理器)
特殊情况下,两个页面会共用一个页面进程:
chrome 默认每个页面一个进程,特殊情况:如果你从当前页面进入另一个新的页面,而且新页面的域名和当前页面一样,那么新页面会共用当前页面的页面进程,如下图:(场景:我从文章的评论者的名字进入了他的个人主页)
那么为什么 chrome
要创建这么多进程,以前的 单进程架构
不好吗?
先说说之前的单进程架构 存在的问题
:
-
不流畅
- 插件:插件和页面
使用同一个进程,插件会堵塞页面的加载
。 - js: 其他页面 js 的死循环或者页面资源加载慢会导致整个浏览器的其他页面加载都卡死或变慢。
- 插件:插件和页面
-
不安全
- 插件:
插件的权限过大,可以读取和修改本地文件
,甚至修改电脑配置文件(使用 c /c++ 编写的插件,可以完全控制你的电脑)。 - js: js 可以通过浏览器的漏洞获取电脑权限,接浏览器之手修改本机配置。
- 插件:
-
不稳定
- 插件:插件
大部分是第三方编写的,水平参差不齐,崩溃也是家常便饭
,插件的崩溃将直接导致浏览器无响应或崩溃。 - js: 一个页面 js 的死循环或崩溃将导致其他页面也卡死或崩溃。
- 插件:插件
所以在多年的研究、开发后,多进程架构
c 位出道,基本解决了这些的问题:
-
流畅性
:-
插件和页面的 js 只能影响自己的进程
,死循环或资源加载慢只能影响自己。(当然 现代浏览器特别吃 cpu 和内存资源,cpu 内存吃满了还是会卡,多进程浏览器的缺点)
-
-
安全性
- 安全沙箱:系统对进程使用
沙箱机制,无法写数据,只能读有限的数据
,通常是你当前域名下载的文件,将恶意插件和 js 的后门堵死了。
- 安全沙箱:系统对进程使用
-
稳定性
:- 因为
进程间是相互隔离的
,所以当一个页面或一个插件崩溃时,仅仅只会影响到当前页面和那个插件本身,完美解决一颗老鼠屎的问题。
- 因为
欢迎交流,有不完善的地方欢迎指出