Chromium基础架构

时间:2024-04-08 11:31:53

Chromium

简介

  • Android webview是单进程模式的Chromium,学习WebView自然绕不开Chromium。
  • 什么是Chromium?

    Chromium是由Google主导开发的网页浏览器。以BSD许可证等多重*版权发行并开放源代码,Chromium的开发可能早自2006年即开始。Chromium 是 Google 的chrome浏览器背后的引擎,其目的是为了创建一个安全、稳定和快速的通用浏览器。—–百度百科

  • 从Chromium的三个特点(安全、稳定、快速),进行总结:

    • 安全:Chromium使用Sanbox(沙箱)模式,控制访问权限(如文件资源),保证浏览器的安全性。
    • 稳定:默认情况下,Chromium为多进程模式,每个渲染器(标签页)为一个进程,相互间几乎互不影响。
    • 快速:Chromium使用大量C++11、C++14新特性,如模板元、constexpr表达式等等,尽可能的加快运行速度。
    • 接下来,分析一下Chromium的基础架构——多进程模式。

    Chromium多进程模式

  • 我们从几个方面,分析一下Chromium的多进程模式

    • 浏览器端(Browser)
    • 渲染器端(Render)
    • 浏览器和渲染器间的通信方式(IPC)
  • Browser
    • 浏览器端直观上来说,就是打开Chrome后,浏览器的主体(*浏览器窗口)。它对应一个单独的进程,Browser进程。该进程一旦挂掉,整个浏览器就会崩溃。
    • Browser进程可以看成一个指挥调度中心。它负责运行UI和管理标签页(Render)。如消息的派发,IO处理等等。
    • Browser进程为每个Render的每个RenderView,维护对应的RenderViewHost,管理浏览器状态、渲染器交互。
    • Browser进程为每个Render维护一个RenderProcessHost,用其来管理对应的RenderViewHost。
  • Render
    • 一个Render进程,可以看成一个标签页。每个标签页,都对应着自己的Render进程。即使一个标签页挂掉,其他标签页也可以正常运作。
    • 每个Render进程,持有一个Webkit(现在为Blink)内核对象。持有一个RenderProcess对象。这个对象,与Browser端的RenderProcessHost对应。同样,每个Render持有一个或多个RenderView,它于Browser端的RenderViewHost对应。
    • RenderProcess管理与浏览器进程间的通信,维护标签页状态。
    • RenderView代表网页的内容。
    • RenderView的唯一标识为,RenderProcessHost+ViewID。
  • Browser与Render间的通信。
    • Browser与Render间通过IPC通信。
    • Browser端通过RenderViewHost与特定标签页中的特定内容交互。

      RenderViewHost -> RenderProcessHost -> IPC -> RenderProcess -> RenderView

总结

  • 上述只是Chromium架构简单的分析,详细的内容请参考Chromium官网
  • 总得来说,Chromium多进程架构为
    • 父进程:Browser,负责管理整个浏览器的状态,运行UI,消息派发(如申请文件资源)。
    • 子进程:Render,负责渲染网页,于Webkit(Blink)交互,向外(Browser、GPU)发送请求。
  • Chromium默认情况为多进程,也可在启动是配置参数,让其以单进程模式运行。Chromium速度很快,但其内存占用较大。。