极客学习浏览器知识

197 阅读2分钟

打开一个页面为什么会有四个进程

本文参考极客时间李兵老师的浏览器工作原理与实践,只用作自己系统学习的记录!!

进程与线程

  • 线程不是单独存在的,它是由进程来启动和管理
  • 一个进程就是一个程序运行的实例,操作系统会为该程序创建一块内存,来存放代码,运行中的数据,和一个执行任务的主线程,我们把这样一个运行环境叫做进程

特点

  • 进程中只要一个线程出错会导致整个进程崩溃
  • 线程之间共享进程中的数据
  • 当一个进程关闭后,操作系统会回收进程所占用的内存
  • 进程之间的内容相互隔离(某个进程崩溃不影响其他进程,进程间的数据通信使用IPC机制)

什么叫内存泄漏

程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致系统运行缓慢甚至系统崩溃等严重后果。

浏览器的演变与展望

单进程浏览器

顾名思义,单进程浏览器是指所有的运行模块(网络,插件,js运行环境,渲染引擎,页面等)都存在一个进程里面,

  • 不稳定 (任何一个模块的错误会导致整个进程的崩溃)
  • 不流畅(若有线程占据整个进程,那模块没有机会执行导致卡顿,另内存泄漏也会导致卡顿)
  • 不安全(插件和脚本)

多进程浏览器 -- 现版本

多进程浏览器架构

  • 浏览器主进程 (界面显示,用户交互,子进程管理,存储等)
  • Gpu进程 (3D css, UI界面绘制)
  • 渲染进程 (html、js、css解析,v8引擎,沙箱内运行 )
  • 网络进程(网络资源加载,沙箱运行)
  • 插件进程(运行插件)

带来的问题

  • 更高的资源占用(每个进程都包含基本的结构副本,例如:js运行环境)
  • 更复杂的体系架构 (各个模块耦合性高,扩展性差,很难适应新的需求)

解决的问题

  • 不稳定 各个进程相互隔离某个进程崩溃并不会影响其他进程
  • 不流畅 当js运行在渲染进程中,当js阻塞了渲染进程对其他进程没有影响
  • 不安全 启用安全沙箱

面向服务架构 -- 未来

16年chrome官方团队使用“面向服务的架构”的思想设计了新的架构,原来的各个模块都会重构成独立的服务,每个服务在独立的进程中运行,访问服务通过IPC进行,