打开一个页面为什么会有四个进程
本文参考极客时间李兵老师的浏览器工作原理与实践,只用作自己系统学习的记录!!
进程与线程
- 线程不是单独存在的,它是由进程来启动和管理
- 一个进程就是一个程序运行的实例,操作系统会为该程序创建一块内存,来存放代码,运行中的数据,和一个执行任务的主线程,我们把这样一个运行环境叫做进程
特点
- 进程中只要一个线程出错会导致整个进程崩溃
- 线程之间共享进程中的数据
- 当一个进程关闭后,操作系统会回收进程所占用的内存
- 进程之间的内容相互隔离(某个进程崩溃不影响其他进程,进程间的数据通信使用IPC机制)
什么叫内存泄漏
程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致系统运行缓慢甚至系统崩溃等严重后果。
浏览器的演变与展望
单进程浏览器
顾名思义,单进程浏览器是指所有的运行模块(网络,插件,js运行环境,渲染引擎,页面等)都存在一个进程里面,
- 不稳定 (任何一个模块的错误会导致整个进程的崩溃)
- 不流畅(若有线程占据整个进程,那模块没有机会执行导致卡顿,另内存泄漏也会导致卡顿)
- 不安全(插件和脚本)
多进程浏览器 -- 现版本
多进程浏览器架构
- 浏览器主进程 (界面显示,用户交互,子进程管理,存储等)
- Gpu进程 (3D css, UI界面绘制)
- 渲染进程 (html、js、css解析,v8引擎,沙箱内运行 )
- 网络进程(网络资源加载,沙箱运行)
- 插件进程(运行插件)
带来的问题
- 更高的资源占用(每个进程都包含基本的结构副本,例如:js运行环境)
- 更复杂的体系架构 (各个模块耦合性高,扩展性差,很难适应新的需求)
解决的问题
- 不稳定 各个进程相互隔离某个进程崩溃并不会影响其他进程
- 不流畅 当js运行在渲染进程中,当js阻塞了渲染进程对其他进程没有影响
- 不安全 启用安全沙箱
面向服务架构 -- 未来
16年chrome官方团队使用“面向服务的架构”的思想设计了新的架构,原来的各个模块都会重构成独立的服务,每个服务在独立的进程中运行,访问服务通过IPC进行,