浏览器是多进程的,打开一个tab页就是打开一个进程。进程是cpu资源分配的最小单位,线程是cpu调度的最小单位。页面的渲染,JS的执行,事件的循环,都在一个进程(浏览器内核(渲染进程))内进行。所以一个tab页的进程内有很多线程来处理这些操作。
Browser进程:浏览器的主进程(负责协调、主控),只有一个。作用有
负责浏览器界面显示,与用户交互。如前进,后退等
负责各个页面的管理,创建和销毁其他进程
将Renderer进程得到的内存中的Bitmap,绘制到用户界面上
网络资源的管理,下载等
第三方插件进程:每种类型的插件对应一个进程,仅当使用该插件时才创建
GPU进程:最多一个,用于3D绘制等
浏览器渲染进程(浏览器内核)(Renderer进程,内部是多线程的):默认每个Tab页面一个进程,互不影响。主要作用为
渲染进程
GPU渲染线程
- 负责渲染浏览器界面,解析HTML,CSS,构建DOM树和Render树,回流和重绘等。
- 当界面需要重绘(Repaint)或由于某种操作引发回流(reflow)时,该线程就会执行。
- GUI渲染线程与JS引擎线程是互斥的,当JS引擎执行时GUI线程会被挂起,GUI更新会被保存在一个队列中等到JS引擎空闲时立即被执行。