跳到主要内容

进程和线程

浏览器有多进程架构优势

  • 进程: 可以看做是一个正在运行的应用程序

    • 进程与进程之间,是相互的独立
  • 线程:运行在进程里面,一个进程里会有一个或者多个线程

当启动一个程序程序的时候,操作系统至少会为其创建一个进程,还会为这个进程分配一块独立的内存空间,这块内存存储相关的数据或者状态

当关闭应用的时候,操作系统会把对应的进程给结束掉,内存空间也会被释放

浏览器是多进程的​

  • 浏览器是多进程的
  • 浏览器之所以能够运行,是因为系统给它的进程分配了资源(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标签对应一个进程并不一定是绝对的

浏览器多进程的优势

多进程有如下优点:

  • 避免某个页面如果奔溃了影响整个浏览器,体验会很差
  • 避免第三方插件奔溃影响整个浏览器
  • 多进程充分利用多核优势
  • 方便使用沙盒模型隔离插件等进程,提高浏览器稳定性