WebKit之多进程模型

转载 2015年11月20日 00:07:01

##概述

前面介绍了WebKit中的资源加载机制,其实它只是一个框架性的东西,实际的资源加载依赖于各个WebKit移植的实现。在Chromium中,它采用了多进程资源加载机制。本章带你了解背后的故事。

##多进程资源加载机制

Chromium的资源加载机制,其实也就是实现ResourceHandle之下的工作。Chromium的资源加载进程如下图所示。


通过对Chromium多进程架构的了解,我们知道Browser进程和Renderer进程及它们之间的联系。Renderer进程在网页的加载过程中需要获取资源,但是由于安全性(实际上,当沙箱模型打开的时候,Renderer进程是没有权限去获取资源的)和效率上(资源共享等问题)的考虑,Renderer进程的获取资源实际上是通过进程间通信将任务交给Browser进程来完成,Browser进程有权限从网络或者本地申请资源。

在Chromium项目架构中的Renderer进程,ResourceHandleInternal通过IPCResourceLoaderBridge跟Browser进程通信。IPCResourceLoaderBridge继承自ResourceLoaderBridge,其作用是负责请求对象和回复对象的解释工作,实际消息的接受和派发交给ResourceDispatcher来处理。

在Browser进程中,首先由ResourceMessageFilter将Renderer进程的消息过滤,如果与资源请求相关,则转发给 ResourceDispatcherHostImpl。它随即创建Browser进程中的ResourceLoader来处理。ResourceLoader是Chromium浏览器实际的资源加载类,它负责管理请求到网络,从网络过来的认证请求,回复的管理等工作。因为这其中每项都有专门的类来负责,但是都是有ResourceLoader来管理这些。从网络或者本地文件读取信息是URLRequest类,它实际上承当了建立网络连接,发送请求数据和接受回复数据的任务,URLRequest之后的工作将在网络栈章节中来解读。

##工作方式和资源共享

资源请求有同步和异步两种方式。前面说了ResourceLoader类承担了Browser进程中的对资源的总体管理任务,对于同步和异步两种资源请求方式,ResourceLoader使用SyncResourceHandle和AsyncResourceHandle来向Renderer进程发送状态消息,并接受Renderer进程对这些消息的反馈。


上图还有两个ResourceHandle子类,第一个是LayeredResourceHandle,它同SyncResourceHandle和AsyncResourceHandle不一样,自己不直接参与资源的处理,而是将处理转给另一个的ResourceHandle。它没有实际意义,仅是BufferedResourceHandle的父类,Buffered类用来缓冲网络或者文件传过来的数据,直到数据足够满足需求然后转给设置的另一个ResourceHandle。ThrottlingResourceHandle类则是将很多个资源请求仅使用一个URLRequest来获取资源,这可以有效地减少网络的开销。

此外,在Chromium中还有很多ResourceHandle的子类,它们的作用各式各样:

RedirectToFileResourceHandler:继承自LayeredResourceHandle,在将接受到的数据转给另一个ResourceHandler的同时,转存到文件。

StreamResourceHandler:继承自LayeredResourceHandle,在将接受到的数据转给另一个ResourceHandler的同时,转存到流。

CertificateResourceHandler:主要处理证书类的资源请求。

资源统一交由Browser进程来处理,这使得资源在不同页面间的共享变得很容易。接下来有个问题就是,因为每个Renderer进程某段时间内可能有多个请求,同时还有多个Renderer进程,Browser进程需要处理大量的资源请求,这就需要一个对这些请求的调度器,这就是Chromium中的ResourceScheduler。

ResourceScheduler管理的对象就是第一个图中最顶层类net::URLRequest的实例,它根据URLRequest的标记和优先级来调度它们。每个URLRequest实例都有一个ChildId和RouteId来标记它属于那个进程。ResourceScheduler中有一个哈希表,该表按照进程来组织URLRequest实例。对于以下类型的请求,立即被发出:1. 高优先级的请求;2. 同步请求;3. 具有SPDY能力的服务器。

##源代码目录

content/browser/loader

 Chromium中的资源加载相关类

Webkit之多进程分析

在WebKit模块化分析>>中说到WebKit2中的多进程模型。多进程模型已经是浏览器的基本架构要素,下面展开分析一下WebKit2中的多进程模型。 协作决定接口,确立责任分工后,对...
  • sauphy
  • sauphy
  • 2015年11月17日 00:27
  • 377

Nginx深入详解之多进程网络模型

一、进程模型         Nginx之所以为广大码农喜爱,除了其高性能外,还有其优雅的系统架构。与Memcached的经典多线程模型相比,Nginx是经典的多进程模型。Nginx启动后以daem...
  • zljjava
  • zljjava
  • 2014年12月01日 10:28
  • 725

Nginx深入详解之多进程网络模型

一、进程模型         Nginx之所以为广大码农喜爱,除了其高性能外,还有其优雅的系统架构。与Memcached的经典多线程模型相比,Nginx是经典的多进程模型。Nginx启动后以daem...

Nginx深入详解之多进程网络模型

Nginx深入详解之多进程网络模型 2013-11-05 17:04:06 分类: Web开发 原文地址:Nginx深入详解之多进程网络模型 作者:scq2099yt 一、进程模型 ...

WebKit 2浏览器内核发布 转为多进程模型

WebKit是著名的开源浏览器引擎,也是Chrome和Safari等主流浏览器的内核(Opera与Chrome的V8内核是基于WebKit开发的)。作为开源项目,它的开发主要由苹果公司主导。  ...

WebKit之Chromium多进程模型分析

Chromium以多进程架构著称,它主要包含四类进程,分别是Browser进程、Render进程、GPU进程和Plugin进程。之所以要将Render进程、GPU进程和Plugin进程独立出来,是为了...
  • sauphy
  • sauphy
  • 2016年01月13日 00:11
  • 415

理解WebKit和Chromium: Chromium多进程模型

#Chromium的进程模型 ##概述 相信你一定有这样的经历:打开很多个页面,不幸的是其中某个页面不响应了或者崩溃了,随之而来的是更不幸的事,所有页面都不响应或者都崩溃了。最让人崩溃的是...

理解WebKit和Chromium: Chromium多进程模型

转载请注明原文地址:http://blog.csdn.net/milado_nju/article/details/7725510 #Chromium的进程模型 ##概述 相信你一定有这样的经历:打开...

Linux网络编程之多进程模型编程与一个使用进程池实现的CGI服务器

一:什么是多进程模型 多进程模型是服务器在接收到大量高并发客户端访问时,通过创建多个子进程来与客户端进行通信。单进程阻塞在read()系统调用的时候,会导致服务器无法响应到其他的连接请求。这时可以通过...

Windows核心编程之多进程概述

一、进程的概念        进程是是一个正在运行的程序的实例(飘~~~),是系统分配资源的单位(线程是执行的单位),包括内存,打开的文件、处理机、外设等,进程由两部分组成:       1、进程...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WebKit之多进程模型
举报原因:
原因补充:

(最多只允许输入30个字)