线程和进程的概念
- 进程是 CPU 资源分配的最小单位, 或者说一个进程就是一个程序的运行实例。详细解释就是,启动一个程序的时候,操作系统会为该程序创建一块内存,用来存放代码、运行中的数据和一个执行任务的主线程,我们把这样的一个运行环境叫进程。
- 线程是 CPU 调度的最小单位
举个例子:
对于操作系统来说,一个任务就是一个进程,比如打开一个浏览器就是启动了一个浏览器进程,打开一个 Word 就启动了一个 Word 进程。有些进程同时不止做一件事,比如 Word,它同时可以进行打字、拼写检查、打印等事情。在一个进程内部,要同时做多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”称为线程。
线程和进程的关系
- 进程中的任意一线程执行出错,都会导致整个进程的崩溃。
- 线程之间共享进程中的数据。
- 当一个进程关闭之后,操作系统会回收进程所占用的内存。
- 进程之间的内容相互隔离。
浏览器的多进程架构
- 浏览器进程: 主要负责界面显示、用户交互、子进程管理,同时提供存储等功能。
- 渲染进程: 核心任务是将 HTML、CSS 和 JavaScript 转换为用户可以与之交互的网页,排版引擎 Blink 和 JavaScript 引擎 V8 都是运行在该进程中,默认情况下,Chrome 会为每个 Tab 标签创建一个渲染进程。出于安全考虑,渲染进程都是运行在沙箱模式下。
- GPU 进程: GPU 的使用初衷是为了实现 3D CSS 的效果,只是随后网页、Chrome 的 UI 界面都选择采用 GPU 来绘制
- 网络进程: 主要负责页面的网络资源加载。
- 插件进程: 主要是负责插件的运行
在浏览器里,从输入 URL 到页面展示,这中间发生了什么?
1、【用户输入(浏览器进程处理的)】
当用户在地址栏中输入一个查询关键字时,地址栏会判断输入的关键字是搜索内容,还是请求的 URL。
- 如果是搜索内容,地址栏会使用浏览器默认的搜索引擎,来合成新的带搜索关键字的 URL。
- 如果判断输入内容符合 URL 规则,那么地址栏会根据规则,把这段内容加上协议,合成为完整的 URL。
- 然后用户按下回车会发现,浏览器进入loading状态,但是页面并没有马上被替换,还是老的页面。
2、【URL 请求过程】
-
浏览器进程会通过进程间通信(IPC)把 URL 请求发送至网络进程,网络进程接收到 URL 请求后,会在这里发起真正的 URL 请求流程。
-
首先,网络进程会查找本地缓存是否缓存了该资源。如果有缓存资源,那么直接返回资源给浏览器进程;如果在缓存中没有查找到资源,那么直接进入网络请求流程。
-
请求前的第一步是要进行 DNS 解析,以获取请求域名的服务器 IP 地址。
-
如果请求协议是 HTTPS,那么还需要建立 TLS 连接。
-
IP 地址进行寻址排队,因为浏览器一次只能发送6个http请求。
-
接下来就是利用 IP 地址和服务器建立 TCP 连接。
-
然后发起http请求,等待服务器响应结果.
-
如果浏览器返回301、302 这2个状态码,浏览器会跳转到新的地址继续导航。如果浏览器返回304,则去查询浏览器缓存进行返回。如果浏览器返回200,那么表示浏览器可以继续处理该请求。
-
如果发现浏览器响应数据的 Content-Type 为 text/html,这个时候浏览器会将下载的资源交给渲染进程处理。
3、【准备渲染进程】
1、通常情况下,打开新的页面都会使用单独的渲染进程;
2、如果从 A 页面打开 B 页面,且 A 和 B 都属于同一站点的话,那么 B 页面复用 A 页面的渲染进程;如果是其他情况,浏览器进程则会为 B 创建一个新的渲染进程。
4、【提交文档】
之前说浏览器在用户敲回车的时候,还是老的界面,那是什么时候开始出现新的界面的加载呢?
这涉及到一个词叫 提交文档 。首先文档是指 URL 请求的响应体数据。
-
“提交文档”的消息是由浏览器进程发出的,渲染进程接收到“提交文档”的消息后,会和网络进程建立传输数据的“管道”。
-
等文档数据传输完成之后,渲染进程会返回“确认提交”的消息给浏览器进程。
-
浏览器进程在收到“确认提交”的消息后,会更新浏览器界面状态,包括了安全状态、地址栏的 URL、前进后退的历史状态,并更新 Web 页面。
5、【渲染阶段】
线程和进程的概念
举个例子:
对于操作系统来说,一个任务就是一个进程,比如打开一个浏览器就是启动了一个浏览器进程,打开一个 Word 就启动了一个 Word 进程。有些进程同时不止做一件事,比如 Word,它同时可以进行打字、拼写检查、打印等事情。在一个进程内部,要同时做多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”称为线程。
线程和进程的关系
浏览器的多进程架构
在浏览器里,从输入 URL 到页面展示,这中间发生了什么?
1、【用户输入(浏览器进程处理的)】
当用户在地址栏中输入一个查询关键字时,地址栏会判断输入的关键字是搜索内容,还是请求的 URL。
2、【URL 请求过程】
浏览器进程会通过进程间通信(IPC)把 URL 请求发送至网络进程,网络进程接收到 URL 请求后,会在这里发起真正的 URL 请求流程。
首先,网络进程会查找本地缓存是否缓存了该资源。如果有缓存资源,那么直接返回资源给浏览器进程;如果在缓存中没有查找到资源,那么直接进入网络请求流程。
请求前的第一步是要进行 DNS 解析,以获取请求域名的服务器 IP 地址。
如果请求协议是 HTTPS,那么还需要建立 TLS 连接。
IP 地址进行寻址排队,因为浏览器一次只能发送6个http请求。
接下来就是利用 IP 地址和服务器建立 TCP 连接。
然后发起http请求,等待服务器响应结果.
如果浏览器返回301、302 这2个状态码,浏览器会跳转到新的地址继续导航。如果浏览器返回304,则去查询浏览器缓存进行返回。如果浏览器返回200,那么表示浏览器可以继续处理该请求。
如果发现浏览器响应数据的
Content-Type为text/html,这个时候浏览器会将下载的资源交给渲染进程处理。3、【准备渲染进程】
1、通常情况下,打开新的页面都会使用单独的渲染进程;
2、如果从 A 页面打开 B 页面,且 A 和 B 都属于同一站点的话,那么 B 页面复用 A 页面的渲染进程;如果是其他情况,浏览器进程则会为 B 创建一个新的渲染进程。
4、【提交文档】
之前说浏览器在用户敲回车的时候,还是老的界面,那是什么时候开始出现新的界面的加载呢?
这涉及到一个词叫 提交文档 。首先文档是指 URL 请求的响应体数据。
“提交文档”的消息是由浏览器进程发出的,渲染进程接收到“提交文档”的消息后,会和网络进程建立传输数据的“管道”。
等文档数据传输完成之后,渲染进程会返回“确认提交”的消息给浏览器进程。
浏览器进程在收到“确认提交”的消息后,会更新浏览器界面状态,包括了安全状态、地址栏的 URL、前进后退的历史状态,并更新 Web 页面。
5、【渲染阶段】