浏览器知识点
1、进程和线程
要了解浏览器的工作原理,要从最基础的进程和线程讲起。说起进程、线程一直了解的比较混乱,直到看到了如下这样图
- 进程:进程是运行的一个实例,是一种运行环境。浏览器在启动一个程序时,操作系统会为其分配一块内存,用于存储数据、程序代码、执行任务的主线程。
- 线程:线程必须依附进程,是程序执行任务的最小单位。在进程中可以有单线程执行,也可以有多线程执行,举个栗子
const a = 1+2; const b = 2+ 2; const c = 3+ 2; console.log(a, b, c);单线程会依次执行,一二三四步;而多线程则可以在一步的时候用三个线程同时执行const a、b、c,第二步的时候再任意一个线程中去console.log
除此之外,进程和线程之间存在以下特点:
- 在一个进程中,任意一个线程出错都会导致这个进程中断崩溃
- 在同一个进程中,各线程可以共享进程中的数据(即公共数据)
- 进程之间的内容信息相互隔离
- 当一个进程结束关闭的时候,操作系统会回收之前分配的内存
在浏览器中功能复杂,单个进程是无法满足需要的,在之前的单进程浏览器时代
页面线程(css解析、渲染、js执行等)、网络线程等都在一个进程中,导致不稳定、不流畅、不安全。
任何一个线程垮了,都会导致整个进程奔溃。
所有的页面渲染都在同一个线程中,不流畅。
各线程之间共享数据,不安全。
目前的多进程浏览器时代
浏览器展开了多个进程,主要分为渲染进程、网络进程、GPU进程、主进程、插件进程这几大块。Chrome会为每个tab单独分配一个渲染进程
特别的是:
- 在同源页面中,从一个页面打开一个新页面,这个新页面会复用父页面的渲染进程
- 页面中如果嵌入一个iframe的话,iframe会单独运行在一个进程中 1.页面中有插件的话,也会为这个插件单独开启一个进程
- 页面中的扩展会占用进程