这是阅读李兵 ——《浏览器工作原理与实践》并作出总结的第一天,整个专题共有46讲,规划是一天做一讲的总结并回顾之前的文章。
1. 进程和线程
1.1 什么是并行处理
- 并行处理就是同一时刻可以执行多个任务
1.2 线程VS进程
- 线程是不能单独存在的,由进程来启用和管理
- 一个进程就是一个程序的运行实例
- 进程与线程之间的4个特点
- 进程中的任一线程崩溃都会导致进程的崩溃
- 线程之间可以共享进程的数据
- 当一个进程关闭之后,操作系统会回收进程所占用的内存
- 进程之间的内容相互隔离
2. 单进程浏览器时代
单进程浏览器时代,浏览器的所有功能模块(如网络、插件、JavaScript运行环境、渲染引擎和页面等)都运行在同一个进程里。
单进程浏览器存在不稳定、不流畅、不安全的问题。
2.1 不稳定
插件
单进程浏览器时代,需要借助插件
来实现诸如Web视频、Web游戏等各种强大的功能,但是插件是最容易出问题的模块,并且还运行在浏览器进程中,所以一个插件的意外崩溃会引起整个浏览器的崩溃。
渲染引擎
渲染引擎模块,通常一些复杂的JS代码都有可能引起渲染引擎模块的崩溃
2.2 不流畅
所有页面的渲染线程、JavaScript执行环境以及插件都运行在一个页面线程里,意味着同一时刻只能有一个模块可以被执行。
脚本或插件使单进程浏览器变卡顿
1 | function freeze() { |
- 执行上述代码,会出现什么问题
JavaScript执行会独占整个线程,导致该线程其他模块无法被执行,即页面没有机会去执行任务,导致整个浏览器失去响应。
页面内存泄漏使单进程变慢
浏览器的内核是十分复杂的,运行一个复杂的页面再关闭页面,会存在内存不能完全回收的情况,导致使用时间越长,内存占用越高,浏览器就会变得越慢
2.3 不安全
插件
插件可以获取到操作系统的任意资源,当你在页面运行一个插件时就意味着这个插件能完全操作你的电脑。如果是个恶意插件,就有可能释放病毒, 窃取账号密码,引发安全问题
页面脚本
可以通过浏览器的漏洞来获取系统权限,这些脚本获取系统权限之后也可以对电脑做一些恶意的事情,引发安全问题。
3. 多进程浏览器时代
3.1 解决不稳定问题
进程之间是相互隔离的,当一个页面或者插件崩溃,影响到的仅仅是当前的页面进程或者插件进程,并不会影响到浏览器和其他页面。这就解决了单进程浏览器时代页面或者插件的崩溃导致浏览器崩溃的不稳定问题
3.2 解决不流畅问题
JavaScript只会运行在渲染进程中,即使JS阻塞了渲染进程,影响到的也只是当前的渲染页面,并不会影响到浏览器和其他页面,因为其他页面的脚本是运行在自己的渲染进程中的。
页面内存泄漏
在关闭页面后,整个渲染进程也会被关闭,那么这个进程占用的内存就会被操作系统回收,就轻松解决了内存泄漏问题
3.2 解决不安全问题
使用安全沙箱。将渲染进程和部分插件进程锁在沙箱里面,即使在渲染进程和插件进程里面执行恶意程序,也无法突破沙箱去获取系统权限。
4. 未来面向服务的架构
总结
- 这时候我们就可以解答题目(题目:仅仅打开了1个页面,为什么有4个进程)为什么有4个进程了。
- 四个进程分别是浏览器进程、渲染进程、GPU进程、网络进程。
- 因为浏览器是多进程浏览器,所以打开一个页面,就会有4个进程,如果有使用插件的话,就会再多一个插件进程。