chromium源码学习笔记(5) -- 多进程

http://blog.sina.com.cn/s/blog_48f93b530101k661.html

  chromium的多进程架构是一个非常大胆的创新,也非常值得研究,本文主要是学习官方设计文档Multi-process Architecture及其他资料的笔记,未专门研读相关源码。目的是对chromium及主流浏览器的多进程架构有一个基本了解,方面后面进一步学习。


      除了chrome,IE8以上版本和Firefox等浏览器均已改为多进程的技术架构,甚至webkit也针对这一点支持了webkit2,多进程架构能解决哪些问题呢?
      1、渲染引擎面对日益复杂的js和css,难免出现崩溃,独立的渲染进程避免整个浏览器的crash;
      2、面对日益复杂的web应用,浏览器已经扮演了类操作系统的角色,让各页面隔离使浏览器整体的速度、安全都有保证;
      3、多进程是模块独立与松耦合的最大化体现,同时保证了各种扩展策略的简洁易行,比如插件。

      从实现上看,各家浏览器的多进程架构基本类似,chromium的实现是其中比较完整和复杂的一个。chromium的多进程放在了webkit之上,而webkit2则从webkit内部支持了多进程(将web处理和ui渲染分开为两个进程),关于webkit2及其与chromium多进程的区别,参考 Introduce to WebKit2
      下面是chromium多进程架构图:
chromium源码学习笔记(5) <wbr>-- <wbr>多进程
      chromium的设计可以简单认为每个Tab页对应了一个进程,据此可以很清晰地看到chromium中的进程关系:主进程Browser管理整个主框架逻辑,负责UI显示和窗口管理,其中有一个Main Thread作为各RenderProcess和RenderView的Host管理不同Tab的渲染和显示,另一个I/O Thread作为代理,支持Host和Client的通信;每个Tab页为Renderer进程,负责自己页面的处理和渲染,通过IPC和I/O Thread的代理,与Browser进程通信。Renderer进程包含Main Thread和Render Thread两个线程,前者负责通信,后者负责页面渲染和交互。可以看到webkit是被包含进每个Renderer进程中的。
      
      每一个Renderer进程包含一个或多个RenderView对象,同时包含一个全局的RenderProcess对象。RenderProcess管理所有的RenderView,维护Renderer进程的全局状态,同时负责与Browser进程通信。RenderView则表示本进程对应的页面内容或弹出窗口。
      每一个RenderProcess在Browser进程中都有一个RenderProcessHost与之对应并通信,一个RenderProcessHost对象代表一个Browser-Renderer的IPC连接。同时每个RenderView与webkit及对应的一个RenderViewHost通信,RenderView与RenderViewHost的通信通过RenderProcess进行。
    
      除了每个tab页一个进程的模型,chromium还支持几种不同的多进程策略:
      1、Process-per-site-instance:用户打开一个站点网页,从此网站打开的一系列链接属于一个进程;
      2、Process-per-site:一个站点一个进程;
      3、Process-per-tab:一个Tab页一个进程;
      4、Single process:单进程模式。
      chrome浏览器默认采用第一种模型,也可以用命令行切换模式,具体参考: Process Models。另外,chromium中的插件也是以进程的形式运行的。

      再来看看多进程加载网页资源架构。在chromium中,所有网络访问在Browser进程中进行,这样做的目的一是有利于全局控制,二是能在不同进程间保持cookie等的session状态。架构图如下所示。
chromium源码学习笔记(5) <wbr>-- <wbr>多进程

      可以看到资源加载是依赖chromium多进程架构设计的,Renderer进程的ResourceDispatcher与Browser进程的ResourceDispatcherHost通信,通过Browser完成资源加载。chromium通过重新实现webkit中的ResourceHandle来实现这一逻辑。具体参考: Multi-process Resource Loading

      关于多进程架构的进一步学习,需要后面继续研读源码。这里有一篇写的非常深入的博客值得参考: Chrome源码剖析

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值