太长不读版
问:你知道打开一个页面,至少会开启几个浏览器进程?
答:xxxxxxxxx
正文
关于打开一个页面,至少会开启几个浏览器进程?
通过上图可以看出是四个,那么为什么打开一个页面,会开启四个进程呢?
关于进程和线程的概念在此就不赘述了(毕竟那点知识已经还给老师了)
早期单进程浏览器
单进程浏览器架构图.png指所有的功能模块都运行在同一个进程里,包括:网络、插件
JavaScript运行环境、渲染引擎和页面等
存在的问题
-
不稳定
早期浏览器需要借助插件来实现诸如Web视频、游戏等功能,然鹅插件是最容易出问题的。在单进程浏览器中,一个插件的崩溃会引起整个浏览器的崩溃 -
不流畅
因为所有页面渲染、JavaScript执行环境以及插件都运行在同一个线程中,意味着同一时刻只有一个模块可以执行
例如下面这个脚本:
while(true) {
// do something
}
如果这个脚本执行了,那么它会占用整个线程,导致其他运行在该线程的模块没有机会被执行。使得整个浏览器失去响应,变卡顿
- 不安全
由于所有模块都运行在一个进程中,如果在插件中编写脚本窃取账号密码,或者释放病毒,便会引发安全性问题
早期多进程架构——早期多进程浏览器
早期Chrome进程架构图不稳定:由于进程之间是相互隔离的,因此不存在一个页面或某个插件的崩溃,影响到整个浏览器
不流畅:同样,JavaScript也是运行在渲染进程中的,所以即使JavaScript阻塞了渲染进程,也只会影响到当前页面的渲染进程,并不会影响浏览器及其他页面
不安全:采用多进程架构的额外好处是可以使用安全沙箱(安全沙箱可以看成是操作系统给进程上加锁,沙箱里的程序可以运行,但不能在硬盘读写任何数据),把插件进程和渲染进程锁在沙箱里
现代多进程架构
最新Chrome进程架构图-
主进程:主要负责界面显示、用户交互、子进程管理,同时提供存储功能
-
渲染进程:核心任务是将HTML、CSS和JavaScript转换为用户可以与之交互的网页,排版引擎Blink和JavaScript引擎V8都是运行在该进程中,默认情况下,Chrome会为每个Tab标签创建一个渲染进程。出于安全考虑,渲染进程都是运行在沙箱模式下
-
GPU进程:Chrome刚开始发布的时候没有GPU进程,GPU的使用初衷是为了实现3D CSS效果,随后网页、Chrome的UI界面都选择采用GPU来绘制,使得GPU成为浏览器普遍需求。Chrome因此在其多进程架构上引入GPU进程
-
网络进程:负责页面的网络资源加载
-
插件进程:负责插件运行
未来面向服务架构
Chrome“面向服务的架构”进程模型图简言之,原来的各种模块会被重构成独立的服务,每个服务都可以在独立的进程中运行。构建一个更内聚、松耦合、易于维护和扩展的系统
小结
打开一个页面,至少会开启四个浏览器进程,即一个浏览器主进程、一个GPU进程、一个网络进程以及一个渲染进程
网友评论