一、进程&线程

1.进程

进程可以理解为是一个运行环境。当启动程序时,系统会为这个程序开辟一块内存地址,用于给程序创建运行环境,内存地址中包含着:运行代码、程序所使用的数据、执行程序任务的主线程。

它是资源分配的最小单位

2.线程

线程是包含在进程中的一个子项,它是执行一个任务的具体流程,一个进程里可以有多个线程,也就是常说的“多线程”,可以提升程序运行效率

它是程序执行的最小单位

3.之间的关系

  • 进程中任一线程执行出错,都会导致线程崩溃
  • 线程之间共享进程中的数据(同在一块内存地址中,数据通过内存共享)
  • 进程被关闭后,系统会将进程所占用的内存进行回收
  • 进程与进程的内容相互隔离(通过TCP/IP进行数据传输)

4.拓展

Chrome目前的架构(多进程架构)
  • 浏览器主进程
    • 页面展示、用户交互、子进程管理
  • GPU进程
    • UI界面绘制
  • 网络进程
    • 网络资源加载
  • 渲染进程(多个)
    • 转换HTML、CSS、JavaScript为网页
    • 运行排版引擎、V8引擎
    • 默认会给每个Tab创建一个渲染进程
  • 插件进程(多个)
    • 运行浏览器插件

二、TCP/IP

目的:保证页面文件能被完成的送达浏览器

实现过程:
总体分为:一个基础,两种方式

基础:

IP头:保证数据包送达至目的主机
在所需要传输的数据包中附上IP头,里面包含双方主机的IP地址、IP版本;便于在传输过程中正确寻址

两种方式:
  1. UDP头:把数据包送达应用程序

光保证数据包传送至目的主机还不够,还需要知道是哪个应用程序需要这些数据包,于是就有了UDP的协议

它是通过增加端口号的方式,用于确认是哪个程序进行了请求;访问网络的程序都必须绑定一个端口号;接受数据时,IP能通过IP地址信息将数据发送给指定的主机,而主机又会通过解析数据中的UDP头,将数据包分发给对应的程序。

优点:

  • 传输速度非常快

缺点:

  • 不提供重发机制
  • 无法跟踪数据是否传输成功
  1. TCP:把数据完整送达应用程序

TCP你补了UDP的缺陷,通过增加了三个机制,保证数据完整可靠的传输:

  • 建立连接:三次握手
  • 传输数据:收发确认
  • 断开连接:四次挥手

优点:

  • 提供重传机制
  • 提供数据包排序机制

缺点:

  • 传输速度相对较慢

二、HTTP

HTTP是建立在TCP协议上的一个允许浏览器向服务器获取资源的协议

浏览器发起HTTP请求流程

1.构建请求

构建一个请求行,里面包含着:

  • 请求方式
  • 请求路径
  • HTTP协议版本

2.查找缓存

浏览器缓存可以帮助网页资源在第一次请求后,将资源缓存至本地中(内存或磁盘中),便于在第二次及之后的请求中能直接使用

对于get方式请求资源时,会优先查看浏览器的缓存,若浏览器中存在缓存,则会直接拦截请求,返回该资源的缓存数据。浏览器的缓存分为两种形式:

2.1强缓存

这是浏览器的默认缓存方案
当缓存数据未失效时(即Cache-Control的max-age没有过期或者Expires的缓存时间没有过期),浏览器将会直接使用该缓存数据,不会与服务器有任何请求交互。

优点:

  • 页面加载速度最快,性能最好

缺点:

  • 服务端资源修改后,页面无法更新(强制刷新)

补充:
对于Chrome来说,使用强缓存时,会根据资源更新频率,将资源以两种不同的情况进行缓存:

  • from memory cache(更新频率高的js、图片、字体)
  • from disk cache(更新频率低的js、css资源)

    2.2协商缓存

    若第一次请求后响应头中没有Cache-Control和Expires或者Cache-Control和Expires过期还或者它的属性设置为no-cache时(即不走强缓存),第二次请求时,将会发送资源请求给服务端进行协商,判断资源是否进行了修改更新:

  • 如果服务端资源没有修改,则会告知浏览器使用缓存中的数据;

  • 如果服务端资源修改,则会返回更新后的资源,并刷新缓存

3.准备IP地址和端口

  • 浏览器请求DNS返回域名对应的IP地址
  • 获取端口号(默认为80)

4.等待TCP队列

TCP限制:HTTP/1.1版本中,同一个域名下最多建立6个TCP连接
拓展:(HTTP/2.0,同域名下可建立1个TCP持久连接)

5.建立TCP连接

三次握手步骤

6.发送HTTP请求

  • 发送第一步中创建的请求行
  • 若是POST请求,则会将需要发送的额外数据放在请求体中发送给服务端
  • 浏览器的其他基础信息,将会放在请求头中发送给服务器

7.接收HTTP数据

  • 收到基础的响应行,包括HTTP协议版本、状态码
  • 服务器返回的额外浏览器数据,放在响应头
  • 返回包含额外数据的响应体


8.断开连接

四次握手关闭TCP连接
若请求或响应头中加入:Connection:Keep-Alive,则不会关闭TCP连接

三、从输入URL到页面展示的流程

1.用户输入URL

2.URL请求

  • 优先查找本地缓存(强缓存)
  • 没有本地缓存就走网络请求
    • DNS解析,获得请求的IP地址(如果是HTTPS,需要建立TLS连接)
    • 利用IP建立TCP连接
    • 浏览器构建请求信息,请求服务器
  • 解析服务端返回的响应头
  • 准备渲染进程(从一个页面打开了另一个新页面,而新页面和当前页面属于同一站点的话,那么新页面会复用父页面的渲染进程
  • 提交响应体数据给浏览器渲染进程
  • 构建DOM树、CSSOM树