进程和线程
浏览器有多进程架构优势
-
进程: 可以看做是一个正在运行的应用程序
- 进程与进程之间,是相互的独立
-
线程:运行在进程里面,一个进程里会有一个或者多个线程
当启动一个程序程序的时候,操作系统至少会为其创建一个进程,还会为这个进程分配一块独立的内存空间,这块内存存储相关的数据或者状态
当关闭应用的时候,操作系统会把对应的进程给结束掉,内存空间也会被释放
浏览器是多进程的
- 浏览器是多进程的
- 浏览器之所以能够运行,是因为系统给它的进程分配了资源(cpu、内存)
- 简单点理解,每打开一个Tab页,就相当于创建了一个独立的浏览器进程
多进程架构优势
容错性
- Chrome会为每一个tab分配一个渲染进程,其中一个标签页挂掉,不会影响其他的标签页
- 其中一个渲染进程挂掉,不会影响其他的渲染进程
- 如果所有的tab页都运行在同一个染进程里面
安全性
- 通过操作系统可以给进程赋予各种权限的原理,浏览器可以让某些进程不具备特定的功能。
- 比如渲染进程,chrome限制了它对文件读写的能力。
多进程架构坏处
- 内存占用的问题
- 每一个进程都有自己的内存空间
多进程的内存优化
- 默认情况下,每个tab都有一个独立的渲染进程。
- chrome的优化是:限制启动的进程的数量。当进程的数量到达某个阈值的时候,Chrome会将访问同一个网站的tab,都放在同一个进程里。
浏览器都包含哪些进程? (列举主要进程)
1、Browser进程:浏览器的主进程(负责协调、主控),只有一个。作用有
- 负责浏览器界面显示,与用户交互。如前进,后退等
- 负责各个页面的管理,创建和销毁其他进程
- 将Renderer进程得到的内存中的Bitmap,绘制到用户界面上
- 网络资源的管理,下载等
2、第三方插件进程:每种类型的插件对应一个进程,仅当使用该插件时才创建
3、GPU进程:最多一个,用于3D绘制等
4、浏览器渲染进程(浏览器内核)(Renderer进程,内部是多线程的):默认每个Tab页面一个进程,互不影响。主要作用为
- 页面渲染,脚本执行,事件处理等
5、定时器线程(setTimeout, setInterval)
6、事件线程(onclick,onchange,…)
7、JavaScript引擎线程,用于解析JavaScript代码
在浏览器中打开一个网页相当于新起了一个进程(进程内有自己的多线程)
- 但是注意:有时候打开多个tab页后,可能有些进程被合并了,所以每一个Tab标签对应一个进程并不一定是绝对的
浏览器多进程的优势
多进程有如下优点:
- 避免某个页面如果奔溃了影响整个浏览器,体验会很差
- 避免第三方插件奔溃影响整个浏览器
- 多进程充分利用多核优势
- 方便使用沙盒模型隔离插件等进程,提高浏览器稳定性