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。
标签:插件,发展史,浏览器,渲染,线程,进程,页面 From: https://www.cnblogs.com/heyujun-/p/17291196.html