该系列文章只是我的学习总结,原视频:time.geekbang.org/column/intr…
一、进程与线程
一个进程就是一个程序的运行实例。当启动一个进程时,操作系统会为该进程创建一片内存,用于存储代码、运行中的数据、以及主线程,这样一个运行环境就叫做进程。
一个进程可以创建、管理多个线程,这些线程并行处理,提高运算效率。
1、进程与线程之间的关系:
- 进程中任意一个线程出错,都会导致该进程的崩溃。
- 一个进程之间的所有线程都共享该进程中数据。
- 进程关闭时,操作系统会回收该进程所占用的内存。(因此在多进程浏览器中,页面死循环崩溃时,我们强行该页面就可以了)
- 进程之间的内容时相互隔离的,一个进程崩溃,是不会影响其他进程的。
二、单进程浏览器
单进程浏览器顾名思义,就是浏览器的所有功能模块都是在一个进程中的,包括网络、渲染引擎、js运行环境、插件等。
单进程浏览器存在的问题有:
- 一个线程出错就会导致整个浏览器的崩溃。比如插件。除此之外,如果我们在js代码中不小心写了死循环,也会造成整个浏览器的崩溃。
- 页面线程中需要执行的操作太多,如果js中有一段代码执行的时间比较长, 那么它就会阻塞之后的页面渲染和页面显示。
- 进程的数据是共享的,那么就意味着我们可以利用浏览器的漏洞直接操作系统,这是不安全的。
- 单进程浏览器还会因为内存泄漏造成整个浏览器的运行速度越来越慢。当一个页面比较复杂,当我们关闭这个页面,内存并没有被回收,只有当整个浏览器被关闭,也就是整个进程关闭时才会回收,所以内存占用会越来越高,浏览器运行越来越慢。
三、多进程浏览器
1、早期的多进程浏览器
早期的浏览器的进程有:插件进程、渲染进程、浏览器主进程,如果所示。解决的单进程浏览器的问题:
- 进程之间相互隔离,因此一个进程的崩溃只会影响当前页面,并不会影响整个浏览器。
- 插件进程、渲染进程都运行在沙箱中,因此即使像插件中如果存在恶意程序,那也不能操作系统。
- 因为多进程的原因,所以浏览器不会越来越慢,因为当一个页面关闭时,渲染进程就会被关闭,内存被回收。
2、现在的多进程浏览器
现在浏览器的进程有:渲染进程、浏览器主进程、GPU进程、插件进程、网络进程。
为了安全考虑,渲染进程、插件进程都是放在沙箱中运行的。
回归题目,打开一个页面会有多少个进程?
答案是至少会打开 4 个进程:
- 浏览器主进程,
- GPU 进程
- 渲染进程
- Network 网络进程
- 插件进程 (打开插件时才有)
- Storage service:当使用存储功能时才会开启该服务。
如果此时还打开了插件,每一类插件对应一个进程。