浏览器的发展史

01 线程VS进程
多线程可以并行处理任务,但是线程是不能单独存在的,它是由进程来启动和管理的。
一个进程就是一个程序的运行实例。简单来说就是启动一个程序的时候,操作系统会为该程序创建一块内存,用来存放代码、运行中的数据和一个执行任务的主线程,我们把这样的一个运行环境叫做进程。
线程是依附于进程的,而进程中使用多线程并行处理能提升运算效率。

进程和线程之间的关系有4个特点:
  1、进程中的任意一线程执行出错,都会导致整个进程的奔溃;
  2、线程之间共享进程中的数据;
  3、当一个进程关闭后,操作系统会回收进程所占用的内存;
  4、进程之间的内容相互隔离;(若要进行数据通信,则需要使用进程间通信机制IPC)

02 单进程浏览器时代(2007以前)
单进程浏览器是指浏览器的所有功能模块都是运行在同一个进程里,这些模块包括了网络、插件、js运行环境、渲染引擎和页面展现等。
缺点:
  1、不稳定;
     早期的插件和渲染引擎模块都是容易出问题的,容易导致整个浏览器的奔溃;
  2、不流畅
     一个脚本无线循环,会独占整个线程,导致其他运行在该线程的模块没有机会去执行任务,导致整个浏览器失去响应变卡顿;
     除了脚本及插件会让浏览器变卡顿之外,页面内存泄漏也是单进程变慢的一个重要原因。
  3、不安全
     通过插件可以获取到操作系统的任意资源,如果是个恶意插件,那么可以释放病毒,窃取账号密码,引发安全性问题;
     页面脚本也可以通过浏览器漏洞来获取系统权限,同样也会引发安全问题。

03 多进程浏览器时代
早期多进程架构
  1、浏览器主进程
  2、插件进程
  3、渲染进程

解决不稳定的问题:由于进程是相互隔离,一个页面或插件崩溃只会影响到当前的页面进程或插件进程,不会影响到其他页面;
解决不流畅问题:js运行在渲染进程中,阻塞当前渲染进程,不会影响到其他页面;
解决不安全的问题:使用安全沙箱(操作系统给进程上了一把锁,不能再硬盘上写入任何数据)。

目前多进程架构
打开浏览器至少包括4个进程:
  1个浏览器主进程
  1个GPU进程
  1个网络进程
  1个渲染进程(可以多个,通常一个tab页面为一个)
另外额外还有:插件进程、拓展进程、iframe进程等

浏览器主进程:主要负责界面显示、用户交互、子进程管理、同时提供存储等功能;
渲染进程:核心任务是将html、css、js转换为用户可以与之交互的网页,排版引擎Blink和javascript引擎V8都是运行在该进程中。出于安全考虑,渲染进程都是运行在沙箱模式下。
GPU进程:主要目的为了实现3D CSS的效果,随后网页、Chrome的UI界面都选择采用GPU来绘制;
网络进程:主要负责页面的网络资源加载;
插件进程:主要负责插件的运行,通过插件进程来隔离,以保证插件进程崩溃不会对浏览器和页面造成影响。

缺点:
更高的资源占用;
更复杂的体系架构;

所以出现了未来面向服务的架构SOA。

posted @ 2023-04-05 22:38  heyujun-  阅读(127)  评论(0编辑  收藏  举报