最直观方法:打开更多工具中的任务管理器,可查看有几个进程。
结论:
现代浏览器是多进程架构,包括:1个浏览器进程,1个网络进程,1个GPU进程,多个渲染进程和多个插件进程。
通常情况下,打开2个页面会有5个进程,即浏览器进程、网络进程、GPU进程、两个渲染进程。
特殊情况:
- 页面中有插件,每个插件算一个进程
- 页面有iframe,会运行在单独的进程中
- 装了扩展,也会占用进程
- 如果两个页面属于同一个站点,并且B从A中打开,会共用一个渲染进程。
例子:多标签共用一个进程场景
并行并发概念:
并行:指的是两个互不影响的独立进程同时进行。
并发:指的是一个时间段内程序处于已启动到完毕之间,且这几个程序都是在同一个处理机上运行的(划分时间段,几个时间段来回切换执行程序,只是用户感觉多个应用程序同时进行)
线程进程
多线程可以并行处理任务,但是线程是不能单独存在的,是由进程来启动管理。
线程执行出错,会导致进程崩溃。
线程之间共享进程中的数据。
进程是一个程序的运行实例。启动程序时,操作系统会为其创建内存,用来存放代码、数据和执行任务的主线程。
进程间相互独立。
当进程关闭后,操作系统会回收进程所占用的内存。
多进程解决单进程的问题
- 不稳定问题:进程相互隔离,一个崩溃,并不会影响其他页面。
- 不流畅问题:js运行在渲染进程中,当前页面阻塞,并不会影响其他页面渲染进程。
- 安全问题:安全沙箱,插件进程和渲染进程没有办法获取系统权限。
各进程作用
- 浏览器进程:负责页面显示,用户交互,子进程管理,存储功能。
- 渲染进程:将html、css、js转换为页面,排版引擎blink和js引擎v8都在该进程中。沙箱模式。
- GPU进程:UI界面选择用GPU绘制。
- 网络进程:网络资源加载;
- 插件进程:负责插件运行,插件易蹦,需要其来隔离,保证浏览器其他进程不受影响。
多进程构架的问题
- 更高资源占用:每个进程都包含公共基础结构(js运行环境),会占用更多浏览器内存资源
- 更复杂的体系架构:浏览器模块间的耦合性高、扩展性差
就有了 未来面向服务架构