转载请注明原文地址:http://blog.csdn.net/milado_nju/article/details/7725510
#Chromium的进程模型
##概述
相信你一定有这样的经历:打开很多个页面,不幸的是其中某个页面不响应了或者崩溃了,随之而来的是更不幸的事,所有页面都不响应或者都崩溃了。最让人崩溃的是其中一些页面还有未保存或者未发送的信息!
这绝对是不堪回首的过去。但是,现在好了,现代浏览器很多都支持多进程模型,这个模型可以很好地避免上面的问题,虽然它很复杂而且也有自身的问题,例如更多的资源消耗,但是它的优势也是非常明显地。
chromium的多进程架构至少带来三点好处,其一是避免单个页面的不响应或者奔溃影响整个浏览器的稳定性;其二是当第三方插件奔溃时候不会影响页面或者浏览器的稳定性;其三是方便了安全模型的实施,也就是说沙箱模型是基于多进程架构的。其实,这很大程度上也是WebKit2产生的原因。那么,这是怎么做到的呢?
下图给出了缺省的chromium浏览器的进程模型。方框代表进程,连接线代表IPC进程间通信。
通常来讲,chromium浏览器包括以下主要进程类型:
1.Browser进程:浏览器的主进程,负责浏览器界面的显示,各个页面的管理,其他各种进程的管理;
2.Render进程:页面的渲染进程,负责页面的渲染工作,WebKit的工作主要在这个进程中完成;
3.NPAPI插件进程:每种类型的插件只会有一个进程,每个插件进程可以被多个Render进程共享;
4.GPU进程:最多只有一个,当且仅当GPU硬件加速打开的时候才会被创建,主要用于对3D加速调用的实现;
5.Pepper插件进程:同NPAPI插件进程,不同的是为Pepper插件而创建的进程
Chromium浏览器的进程模型,包括以下特征:
1.browser进程和页面是分开的,这保证了页面的奔溃不会导致浏览器主界面的奔溃;
2.每个页面是独立的进程,这保证了页面之间相互不影响;
3.插件进程也是独立的,插件的问题不会影响浏览器主界面和页面;
4.GPU硬件加速进程也是独立的。
因为这么多的进程,开发者通常需要知道进程列表中的进程类别,这很简单,可以通过进程的命令行参数"--type"来识别。
有趣的是,就在我写下上面这段文字的时候,我的chrome浏览器的flash插件崩溃了,幸运的是其他一切都很好,感谢chrome的多进程模型!
##模型的类型
其实介绍了进程模型,其实Chromium支持多种进程模型,特别是对页面而言,下面简单的介绍以下模型的类型:
###Process-per-site-instance
该类型的含义是对同一个域的实例都会创建独立的进程。举个例子来讲,例如,用户访问了milado_nju的CSDN博客(我的博客),然后从个人主页打开多篇文章时,每篇文章的页面都是该域的一个实例,因而它们都共享同一个的进程。如果新打开CSDN博客的主页,那么就是另一个实例,会重新创建进程来渲染它。这带来的好处是每个页面互不影响,坏处自然是资源的巨大浪费。
###Process-per-site
该类型的含义是不同一个域会创建独立的进程,同一域的不同实例共享同一个进程。好处是对于不同的域可以共享,相对较小的内存消耗,坏处是可能会有特别大的Renderer进程。可以在命令行加入参数--process-per-site来尝试它。
###Process-per-tab
该类型的含义是为每个标签页创建一个独立的进程,这也是chrome/chromium的缺省行为
###Single process
该类型的含义是不为页面创建任何独立的进程,所有渲染工作都在browser进程中。但是这个类型只是实验性质的,不稳定,因而不推荐使用,只有在比较单进程和多进程时候比较有用,可以在命令行加入参数--single-process来尝试它。
##沙箱模型
在页面的多进程模型中,页面的渲染是运行在沙箱模型中的Render进程中实现的,这些渲染引擎没有访问本地资源的能力(例如文件系统,窗口系统,等等),这可以保护渲染引擎被入侵。
##参考文献
1.http://www.chromium.org/developers/design-documents/process-models
By yongsheng@chromium.org
分享到:
相关推荐
WebKit和Chromium源码及原理剖析
底层基于(Chromium49/51)/(CEF3.2623/CEF3.2704)内核进行制作,支持系统XP,03,Vista,Win7/8/10 32/64。 技术支持: 内核: WebKit/Chromium/CEF3
众所周知, chromium 是多进程框架的,整个 chromium 浏览器包括四类进程: browse 主进程、 render 渲染进程、 GPU 进程和插件进程。本文所要讲述的 chromium 事件处理流程 主要牵涉到其中的两种进程: browser ...
Docker 中的 Chromium 浏览器 如果您想知道如何在 Docker 中运行 Chromium。 这个 docker image 可能是一个解决方案。 在 Docker 中运行 Chrome 的需要有助于部署测试。 例如,您可能有另一个 docker 镜像正在运行,...
用于Chromium的Docker容器 这是Chromium的Docker容器。 可通过现代Web浏览器(无需在客户端上进行安装或配置)或任何VNC客户端来访问应用程序的GUI。 非常感谢@jlesage。 该图像基于 表中的内容 取消RAID 用户/...
Chromium是一个开放源代码的浏览器项目,旨在为所有Internet用户构建一种更安全,更快,更稳定的方式来体验Web。该站点包含设计文档,体系结构概述,测试信息等,以帮助您学习构建和使用Chromium源代码。
Chromium是一个开放源代码的浏览器项目,旨在为所有Internet用户构建一种更安全,更快,更稳定的方式来体验Web。该站点包含设计文档,体系结构概述,测试信息等,以帮助您学习构建和使用Chromium源代码。
高朗ChromeDocker映像包Golang和Chromium,基于golang:1-alpine 。执照麻省理工学院
未谷Chrome 消除Google Web服务依赖性的轻量级方法 欢迎帮助! 有关更多信息,请参阅文档。 目标 按重要性降序(即最重要的目标...在不登录Google帐户的情况下,Chromium在安全性和隐私性方面做得很好。 但是,Chrom
内核: WebKit/Chromium/CEF3 (www.cefbuilds.com) 易框架: E(CEF3++) Template Library (www.ps-works.cn,交流,) PS: 关于无法播放flash问题的解决方法: 首先检查系统是否已经安装了相应版本的flash播放器,检查方法:...
要使用它们,您需要: 构建及其和自定义版本。 查看您感兴趣的Chromium版本: $ git submodule init$ git submodule update --reference . v42 # or v32, or... 使用run-gyp命令运行带有FreeBSD适当参数的Gyp...
是由The Chromium Project开发和维护的开源Web浏览器。 谷歌浏览器也于2008年发布,是由谷歌开发和维护的专有网络浏览器。 Chrome和Chromium相互绑定的原因是Chome借用了Chromium的源代码。 使用Chromium的主要好处...
Chromium:45.0.2454.101 WebKit:537.36 此版本不自动支持flash 开启方法添加工程文件添加 procedure AppendCefCmdline(const processType: ustring; const cmd: ICefCommandLine); begin cmd.AppendSwitch('enable-...
Portapps未与Ungoogled Chromium:trade_mark:或其任何子公司或分支机构有任何关联,关联,授权,认可或以任何方式与之正式关联。 可以在上找到Ungoogled Chromium:trade_mark:官方网站。 Ungoogled Chromium:trade...
如何从此水龙头安装Chromium 通过公式: brew install domt4/chromium/chromium 通过木桶: brew cask install domt4/chromium/mac-chromium 然后将以常规方式获取更新: brew update brew upgrade Chrome发布...
ChromeChromium开发版本:macOS和Windows-所有编解码器仅64位
AndroidChromium 简单的介绍 谷歌浏览器android版源程序 该项目是世界一流的android体系结构 澄清项目业务逻辑可以完全适合国内公司工程师 该项目将长期跟踪和更新Google浏览器内核版本,欢迎加入星号 注意 如果您...
当前版本安装brew tap mtslzr/marmaduke-chromiumbrew updatebrew install marmaduke-chromium酒桶此水龙头包括Marmaduke Chromium的三个版本: marmaduke-chromium包括Google Sync和wildvine(适用于Netflix的DRM...
AndroidChromium 简单的介绍 谷歌浏览器android版源程序 该项目是世界一流的android体系结构 澄清项目业务逻辑可以完全适合国内公司工程师 该项目将长期跟踪和更新Google浏览器内核版本,欢迎加入星号 注意 如果您...
最新的内核版本 (Version) WebKit 537.36 Chrome 74.0.3729.157 的CMake后的win32下Visual Studio 2015工程,解压后,请用vs2015(或以上)打开Platform-win32目录下cef.sln,本人Debug模式、Release模式下都编译...