目录
1. 进程和线程
什么是并行处理:计算机中的并行处理就是同一时刻处理多个任务
线程是不能单独存在的,它是由进程来启动和管理的。
1.1 进程
一个进程就是一个程序的运行实例。
启动一个程序的时候,操作系统会为该程序创建一块内存,用来存放代码、运行中的数据和一个执行任务的主线程,我们把这样的一个运行环境叫
进程
。
线程是依附于进程的,而进程中使用多线程并行处理能提升运算效率。
1.2 进程和线程之间的关系
1、进程中的任意一线程执行出错,都会导致整个进程的崩溃。
2、线程之间共享进程中的数据。
3、当一个进程关闭之后,操作系统会回收进程所占用的内存。
4、进程之间的内容相互隔离。
2. 单进程浏览器时代
单进程浏览器是指浏览器的所有功能模块都是运行在同一个进程里。
单进程浏览器的架构如下图所示:
问题:
- 不稳定
- 不流畅
- 不安全
3. 多进程浏览器时代
3.1 早期多进程架构
2008 年 Chrome 发布时的进程架构
进程之间是通过 IPC 机制进行通信
IPC机制了解链接:(30条消息) 进程间通信(IPC机制)精炼详解_Chin_style的博客-CSDN博客_ipc通信机制
进程是相互隔离:解决不稳定的问题。
JavaScript 也是运行在渲染进程中:即使 JavaScript 阻塞了渲染进程,影响到的也只是当前的渲染页面
安全问题:采用多进程架构的额外好处是可以使用安全沙箱
3.2 目前多进程架构
最新的 Chrome 浏览器包括:1 个浏览器(Browser)主进程、1 个 GPU 进程、1 个网络(NetWork)进程、多个渲染进程和多个插件进程。
1、浏览器进程。
主要负责界面显示、用户交互、子进程管理,同时提供存储等功能。
2、渲染进程。
核心任务是将 HTML、CSS 和 JavaScript 转换为用户可以与之交互的网页,排版引擎 Blink 和 JavaScript 引擎 V8 都是运行在该进程中,默认情况下,Chrome 会为每个 Tab 标签创建一个渲染进程。出于安全考虑,渲染进程都是运行在沙箱模式下。
3、GPU 进程。
其实,Chrome 刚开始发布的时候是没有 GPU 进程的。而 GPU 的使用初衷是为了实现 3D CSS 的效果,只是随后网页、Chrome 的 UI 界面都选择采用 GPU 来绘制,这使得 GPU 成为浏览器普遍的需求。最后,Chrome 在其多进程架构上也引入了 GPU 进程。
4、网络进程。
主要负责页面的网络资源加载,之前是作为一个模块运行在浏览器进程里面的,直至最近才独立出来,成为一个单独的进程。
5、插件进程。
主要是负责插件的运行,因插件易崩溃,所以需要通过插件进程来隔离,以保证插件进程崩溃不会对浏览器和页面造成影响。
打开 1 个页面至少需要 1 个网络进程、1 个浏览器进程、1 个 GPU 进程以及 1 个渲染进程,共 4 个;如果打开的页面有运行插件的话,还需要再加上 1 个插件进程。
多进程模型带来了一些问题:
- 更高的资源占用
- 更复杂的体系架构
4. 未来面向服务的架构
在 2016 年,Chrome 官方团队使用“面向服务的架构”(Services Oriented Architecture,简称 SOA)的思想设计了新的 Chrome 架构。
下面是 Chrome“面向服务的架构”的进程模型图:
资源受限的设备上
5. 总结:
早期浏览器:
不稳定(单独进程)
不流畅(单独进程)
不安全(沙箱)
早期多进程架构:
主进程 渲染进程 插件进程
现代多进程架构:
主进程 渲染进程 插件进程 GPU进程 网络进程
未来:
面向服务架构
所以
5.1 答案:
因为打开1个页面:至少需要1个网络进程,1个浏览器进程,1个GPU进程以及1个渲染进程。