浏览器多进程
一、从大的方面来说,浏览器是一个多进程架构。
二、它可以是一个进程包含多个线程,也可以是多个进程中,每个进程有多个线程,线程之间通过IPC通讯。每个浏览器有不同的实现细节,并没有标准规定浏览器必须如何去实现。
【示例】chrome架构 1、下面这张图是目前chrome的多进程架构图。 ![]() 2、我们来看看这些进程分别对应浏览器窗口中的哪一部分: ![]() ![]() 3、那么,怎么看浏览器对应启动了什么进程呢? chrome中,我们可以通过更多->More Tools->Task Manager看到启动的进程。 ![]() |
---|
三、从chrome官网和源码,我们也可以得知,多进程架构中包含这些进程:
浏览器多进程-detail
浏览器多进程查看
一、新开一个tab页,会新打开一个进程吗?
- Browser进程、GPU进程是打开浏览器后,始终只有一个,所以不会新打开
- 一般会新打开一个Renderer进程,但是不一定会新开
- 打开浏览器的多个标签页,会有一个主进程以及每个Tab页有一个独立的进程。
- 但是浏览器也会有自己的优化机制。有时候打开多个tab页后,有些进程会被合并。如打开多个空白标签页后,多个空白页标签会被合并成一个进程。
| 【示例】打开了chrome浏览器的多个标签页,然后可以在chrome的任务管理器中看到有多个进程(分别是每个)Tab页有一个独立的进程,以及一个主进程。如果再多打开一个tab页,进程正常会+1以上。
| | —- |
【示例】打开多个空白标签页后,多个空白标签页被合并成了一个进程。 可以通过chrome的更多工具-任务管理器验证。 ![]() |
---|
浏览器多进程的优势
一、相比于单进程浏览器,多进程有如下优点
- 避免单个page crash影响整个浏览器
- 避免第三方插件crash影响整个浏览器
- 多进程充分利用多核优势
- 方便使用沙盒模型隔离插件等进程,提高浏览器稳定器
Browser进程和浏览器内核(Renderer进程)的通信过程
一、Browser进程和Renderer进程的通信过程
- Browser进程收到用户请求,首先需要获取页面内容(譬如通过网络下载资源),随后将该任务通过RendererHost接口传递给Renderer进程
- Renderer进程的Renderer接口收到消息,简单解释后,交给渲染线程,然后开始渲染
- 渲染线程接收请求,加载网页并渲染网页,这其中可能需要Broswer进程获取资源和需要GPU进程来帮助渲染
- 当然可能会有JS线程操作DOM(这样可能会造成回流并重绘)
- 最后Rnederer进程将结果传递给Browser进程
- Browser进程接收到结果并将结果绘制出来