chromium multi-process architecture

本文档从high-level的角度描述Chromium的多进程架构。

问题

要构建一个决不崩溃或挂起的渲染引擎几乎是不可能的。同样的,要构建一个100%安全的渲染引擎也是不可能的。

从某些角度来看,当今的web浏览器有点类似于过去的单用户,多任务操作系统。正如一个异常的程序会导致整个系统down掉,一个异常的网页也会导致一个现代浏览器挂掉。

现代操作系统之所以更加健壮利益于它们把应用放到隔离的进程中。一个应用的崩溃不会影响其它的应用或者操作系统本身。任一用户对其它用户的数据操作都是严格受限的。

架构概述

我们针对浏览器的tab使用隔离的进程。这种方案可以保护应用本身完整,不受渲染引擎的bugs或小差错的影响。同时,我们也严格限制从渲染引擎到其它进程的访问。从某些方面来看,这给网页浏览带来了内存保护和访问控制的收益。而这两点均借鉴自操作系统。

我们把主进程称为“browser process(浏览进程)或browser”。该进程负责UI的运行和tab的管理工作,同时,也负责插件进程的管理工作。类似的,tab特定的进程被称为“render process”或者“renderer”。Renderers使用”WebKit”开源引擎解析并布局HTML文档。

管理渲染进程(Rendering process / Renderer)

每一个Renderer对应一个全局的RenderProcess对象。该对象管理Renderer与父进程Browser process间的通信,并维护全局状态。Browser则维护多个RenderProcessHost对象。每个RenderProcessHost对应一个Renderer。Browser负责策略浏览状态以及与Renderer的通信。Browser与Renderers间的通信由Chromium的IPC系统承担

管理Views

每个Renderer有一个或多个RenderView对象。一个Renderer相当于一个tab。相应的,RenderProcessHost维护一个RenderViewHost。一个RenderViewHost对应于Renderer中的一个view。同一个Renderer中,为了区分不同的view,每个view会被分配一个ID。这些ID在同一个Renderer里是唯一的,但在browser里并不是。所以,要标识一个view,需要RenderProcessHost和一个view ID。

组件和接口

在Render进程里:

  • RenderProcess负责处理与RenderProcessHost间的IPC。RenderProcessHost位于Browser中。每一个Render进程仅一个RenderProcess。所有的browser和renderer间的通信都是这样子的。
  • RenderView对象与browser进程中的RenderViewHost通信(当然,是通过RenderProcess完成的)。RenderView代表一个网页上的内容或弹出窗口中的网页内容。

在Browser进程中:

  • Browser对象代表一个顶层的browser窗口
  • RenderProcessHost代表browser端的browser<->renderer ipc连接。在browser里,每一个render进程对应一个RenderProcessHost。
  • RenderViewHost封装了与远端的RenderView间的通信流程。RenderWidgetHost处理输入和RenderWidget的绘制。

共享Renderer

通常,一个新窗口或新tab打开一个新的进程。浏览器会生成一个新进程,然后,指令它去创建一个单独的RenderView。

有时,tabs或windows间共享Renderer也是必须的或者非常有必要的。比如,一个web应用使用window.open打开一个同步模式的新窗口。这种情况下,当我们创建一个新窗口或tab时,我们需要复用原进程,即窗口打开者所在的进程。对于进程数过多的情况,我们也有相应的策略把新tab交给已存在的进程。这些策略参见Process Models

崩溃探测或渲染异常

每一个到browser进程IPC链接会监控渲染进程(renderer)的句柄。如果这些句柄收到信号,那么渲染进程已经崩溃,tab页收到崩溃通知。从今开始,当Renderer崩溃时,我们会显示一个”sad tab“屏来通知用户。当前页面可以通过点击”preload“按钮重新加载。

Renderer沙盒化

假设WebKit在一个分离的进程中运行,我们有机会控制它对系统资源的访问。比如,我们可以限定renderer的网络操作只能通过其父进程完成。类似的,我们也可以严格限制它对文件系统的访问。

Plug-ins

NPAPI插件运行在自己的进程中,与renderers分离。详情参见Plugin Architecture

Chrome设计文档-多进程架构的更多相关文章

  1. Chrome设计文档-多进程资源加载

    原文:Multi-process Resource Loading 背景 浏览器主进程及browser process处理所有的网络通信.原因有三点: Browser process可以控制每一个re ...

  2. 朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素

    朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素 [下载文本PDF进行阅读] 本文我会来说说我认为架构评审中应该看的一些点,以及我写设计文档的一些心得.助你在架构评审中过五关斩六将,助 ...

  3. VM架构设计文档初稿v0.01

    VM架构设计文档初稿v0.01 文档介绍 本文档是经过讨论,作为VM新架构设计开发中的重要依据.对该架构的整个系统的结构进行详实细致的描述.阐述框架结构,说明该架构所采取的设计策略和所有技术,并对相关 ...

  4. DDD领域驱动设计 - 设计文档模板

    设计文档模板: 系统背景和定位 业务需求描述 系统用例图 关键业务流程图 领域语言整理,主要是整理领域中的各种术语的定义,名词解释 领域划分(分析出子域.核心域.支撑域) 每个子域的领域模型设计(实体 ...

  5. Msmq设计文档(赋源代码)

    Msmq设计文档(赋源代码)   Msmq设计文档     文件状态: [√] 草稿 [  ] 正式发布 [  ] 正在修改 文件标识: ECI-MSMQ v01 当前版本: 0.5 作    者: ...

  6. Atitit.atiagent  agent分销系统 代理系统 设计文档

    Atitit.atiagent  agent分销系统 代理系统 设计文档 1. 启动项目1 2. 首也2 3. 登录功能2 4. 用户中心2 5. 充值查询3 6. 授权下级代理4 7. 我的提成5 ...

  7. Net 通用权限管理系统源码 带数据库设计文档,部署说明文档

    Net 通用权限管理系统源码 带数据库设计文档,部署说明文档 包括数据库设计文档部署安装文档源码数据库文件 下载地址:http://www.mallhd.com/archives/1389

  8. 基于Apriori算法的Nginx+Lua+ELK异常流量拦截方案 郑昀 基于杨海波的设计文档(转)

    郑昀 基于杨海波的设计文档 创建于2015/8/13 最后更新于2015/8/25 关键词:异常流量.rate limiting.Nginx.Apriori.频繁项集.先验算法.Lua.ELK 本文档 ...

  9. Access数据库自动生成设计文档

    在做Access数据库设计时,常常直接在access文件中建表,建字段,然后写设计文档时,又得重新再写一遍字段和表间关系.其实access数据库自己就支持自动生成数据库文档. 操作方法如下: 数据库工 ...

随机推荐

  1. op cache config

    [opcache] ; dll地址 zend_extension=php_opcache.dll ; 开关打开 opcache.enable=1 ; 开启CLI opcache.enable_cli= ...

  2. < meta > 元素 概要

    < meta > 元素 概要 标签提供关于HTML文档的元数据.元数据不会显示在页面上,但是对于机器是可读的.它可用于浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他 we ...

  3. 16.java.lang.InterruptedException

    java.lang.InterruptedException 被中止异常 当某个线程处于长时间的等待.休眠或其他暂停状态,而此时其他的线程通过Thread的interrupt方法终止该线程时抛出该异常 ...

  4. startup_LPC17XX.s 启动文件分析

    工程中startup_LPC17XX.s是M3的启动文件,启动文件由汇编语言写的,它的作用一般是下面这几个: 1)堆和栈的初始化 2)中断向量表定义 3)地址重映射及中断向量表的转移 4)设置系统时钟 ...

  5. Puppet的执行过程

    图1 Puppet工作流程 1. 客户端Puppetd向Master发起认证请求,或使用带签名的证书. 2. Master告诉Client你是合法的. 3. 客户端Puppetd调用Facter,Fa ...

  6. S3C2440 之SPI

    概述: S3C2440有两个串行外设SPI接口,SPI具有全双工通信 SPI方框图 SPI操作: 通过使用SPI接口,S3C2440可以与外部器件同时发送.接收8位数据.当SPI接口为主机时,可以通过 ...

  7. SSH整合方案2

    [案例3]SSH整合_方案2 **  案例描述  两个知识点的演示  其一,SSH整合的第二个方案  其二,Spring+JDBC+Struts2  参考代码  31) 使用工程spring4  32 ...

  8. 如何查看npm配置?

    npm config list //查看基本配置 npm config list -l //查看所有配置 npm本地安装与全局安装有什么区别? npm install grunt // 本地安装,则是 ...

  9. 2014-11-21 DHTMLX是什么

    什么是dhtmlx? dhtmlx是一套网页开发 的函式库,他提供了树状元件.数据方格组件.工具列等组件供开发 人员使用. dhtmlx组件是一个JavaScript 库,提供了一套完整的Ajax驱动 ...

  10. You raise me up

    You raise me up, so I can stand on mountains;You raise me up, to walk on stormy seas;I am strong, wh ...