加载中…
正文 字体大小:

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

(2013-04-20 15:27:46)
标签:

chrome

chromium

it

webkit

进程通信

分类: webkit
    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源码剖析

0

阅读 评论 收藏 转载 喜欢 打印举报
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有