官方介绍:http://blogs.msdn.com/b/ie/archive/2008/03/11/ie8-and-loosely-coupled-ie-lcie.aspx

参考文档:http://www.vista123.com/html/8972.html

IE8 松散耦合进程框架,英文原文是Loosely Coupled IE (LCIE),是一种基于作业(Job)的进程管理方式。这种方式已经逐渐被各大浏览器所采用,例如Google Chrome。

下图是IE8的LCIE框架结构:

作业是Windows 2000引入的一种进程管理方式,可以用一个宿主进程管理多个子进程。管理进程可以给子进程设置很多属性,特别是一些和性能相关的属性,具体可以参考 SetInformationJobObject Function (Windows) 的API说明文档。

当我们安装完IE8以后,打开一个Tab,使用 Process Explorer 会发现,有2个iexplore.exe实例,这个就是最典型的LCIE表现:Tab工作在进程空间里面,有一个独立的框架进程用于管理Tab进程。

如下图所示,我打开了4个Tab,出现了3个Tab进程(为什么是3个呢,见下面解释),框架进程的进程PID是12596:

因 为LCIE的模型决定了IE的框架和Tab是独立的进程体,因此相互之间是需要通信的,根据Process Explorer的显示,

框架进程和Tab进程的通信是使用的ALPC(高级本地过程调用,在Windows内核里面经常可以见到,效率很高)机制(在 Windows Vista上面),

关于LPC的技术解释,请Google搜索。

我们继续研究LCIE的 标签创建方式。当我们新开启一个Tab以后,系统会创建一个iexplorer.exe进程用于和这个Tab绑定,那么我开启10个Tab以后,是10个 进程吗?

实际的测试结果是:不一定。

具体创建多少个Tab进程实际是由IE框架确定的,根据目前已知的结论,IE框架会根据可用的物理内存大小确认最多创 建几个Tab进程。

注:默认情况下,我的2台笔记本(物理内存均配置了4GB,可用内存一般在1.5GB左右)在Windows Vista里面,创建的Tab进程最多是5个。

那么,是否有可能控制Tab进程的数量呢?答案是可以的。

IE8 Frame在启动的时候,会检查注册表

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main下面的TabProcGrowth键值(键值类型DWORD),利用这个键值,就可以操作IE8的Tab数量了。

TabProcGrowth=0

IE框架和Tab工作在一个进程里面,Tab采用线程的方式创建。

当TabProcGrowth=0的时候,IE的保护模式(Protect Mode)会关闭,这种模式类似于在Windows Vista下面把 IE7 以 run as administrator方式启动。

TabProcGrowth=1

IE框架和Tab工作在不同的进程里面。

但是Tab按照不同的mandatory integrity level (MIC)创建,举例就是需要关闭保护模式的Tab工作在一个浏览进程里面,另外的工作在另外的一个浏览进程里面。

例 如:我把taobao.com和kztechs.com加入了Trusted Site列表里面,当使用这个模式的时候,访问taobao.com和kztechs.com的时候,Tab将工作在一个进程里面,而访问其他的站点的时 候,Tab将工作在另外的一个进程里面。

这是因为加入Trusted Site列表以后,IE的保护模式会关闭,MIC等级的不同造成了的不同的Tab进程的出现。

TabProcGrowth>1

在这个模式下,TabProcGrowth的值将决定最多创建的Tab进程数目。如果TabProcGrowth为100,那么最多创建100个Tab进程。

TabProcGrowth 不存在(默认情况)

使用默认的机制,根据可用的物理内存数量决定Tab进程的数量。

关于IE8 LCIE的FAQ:

1、为什么不是每个Tab一个进程,而有一个上限呢?

因 为创建一个进程的开销是远远大于创建一个线程的,创建一个进程,需要重新加载所有相关的模块,而且进程间的切换也会带来很大的性能损耗。

IE8的LCIE 机制在达到Tab进程最多数目以后,后续的新开网页将将采用负载平衡的机制让不同的Tab进程进行处理,以达到资源的最大利用。

2、LCIE模型里面,会话是怎么处理的?我怎么感觉到不同的Tab都使用的是同一个会话呢?

的确,因此Tab进程的出现,会话的处理是比较关注的一个点。

在IE8里面,会话是和IE框架绑定的, 在这个IE框架下的所有Tab,共享同一个会话,具体来说就是:

假设第一个Tab进程访问了msdn.microsoft.com网站并属于了Live ID登录以后,后续新开的Tab进程如果也访问了msdn.microsoft.com网站,那么是共享刚才的Live ID的,除非过期

;而且,即使你从开始菜单里面点击IE图标,新创建的窗口也是使用先前的会话的。

3、在LCIE模型里面,如果让不同的窗口使用不同的会话呢?

要在IE8里面,让不同的窗口使用不同的会话,可以点击文件菜单-->新建会话菜单项,使用这个方式,新创建的窗口将采用一个新的会话,以便和之前的会话区分开来。

4、为什么有时候IE8 Tab进程在访问的页面关闭以后,Tab进程还是存在呢?

这 是为了性能考虑的,防止用户马上又新开一个窗口,前面说过创建一个Tab进程是需要很多资源的。

在默认情况下,IE8的Tab进程在网页窗口关闭以后,将 驻留60秒时间,然后再退出。

当然,我们也可以通过设置注册表 HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main下的TabShutdownDelay DWORD键值来控制Tab进程的退出时间。注意:TabShutdownDelay的单位是毫秒(1秒等于1000毫秒)。

文末:

IE8 相对于IE7来说,无论是进程框架和渲染引擎都得到了极大的改善和优化,而且在各种标准支持方面都比IE7好了不少。

IE8 松散耦合进程框架(Loosely-Coupled IE (LCIE)--特性介绍的更多相关文章

  1. spider RPC框架的需求来源与特性介绍(一)

    spider RPC 特性介绍 spider RPC 性能测试 spider RPC 入门指南 spider RPC 配置文件参考 spider RPC 开发指南 spider RPC 安全性 spi ...

  2. [.net 面向对象程序设计深入](26)实战设计模式——使用Ioc模式(控制反转或依赖注入)实现松散耦合设计(1)

    [.net 面向对象程序设计深入](26)实战设计模式——使用IoC模式(控制反转或依赖注入)实现松散耦合设计(1) 1,关于IOC模式 先看一些名词含义: IOC: Inversion of con ...

  3. [.net 面向对象程序设计深入](31)实战设计模式——使用Ioc模式(控制反转或依赖注入)实现松散耦合设计(1)

    [.net 面向对象程序设计深入](31)实战设计模式——使用IoC模式(控制反转或依赖注入)实现松散耦合设计(1) 1,关于IOC模式 先看一些名词含义: IOC: Inversion of con ...

  4. Microsoft Prism安装使用教程 搭建WPF松耦合架构框架

    Microsoft Prism安装使用教程 搭建WPF松耦合架构框架 Prism是由微软Patterns & Practices团队开发的项目,目的在于帮助开发人员构建松散耦合的.更灵活.更易 ...

  5. Windows Azure Service Bus Topics实现系统松散耦合

    前言 Windows Azure中的服务总线(Service Bus)提供了多种功能, 包括队列(Queue), 主题(Topic),中继(Relay),和通知中心(Notification Hub) ...

  6. Spring4- 01 - Spring框架简介及官方压缩包目录介绍- Spring IoC 的概念 - Spring hello world环境搭建

    一. Spring 框架简介及官方压缩包目录介绍 主要发明者:Rod Johnson 轮子理论推崇者: 2.1 轮子理论:不用重复发明轮子. 2.2 IT 行业:直接使用写好的代码. Spring 框 ...

  7. 内部框架——axure线框图部件库介绍

    网页框架代码<iframe border=0 name=lantk src="要嵌入的网页地址" width=400 height=400 allowTransparency ...

  8. Thinkphp框架拓展包使用方式详细介绍--验证码实例(十一)

    原文:Thinkphp框架拓展包使用方式详细介绍--验证码实例(十一) 拓展压缩包的使用方式详细介绍 1:将拓展包解压:ThinkPHP3.1.2_Extend.zip   --> 将其下的 \ ...

  9. 全新升级的AOP框架Dora.Interception[3]: 基于特性标注的拦截器注册方式

    在Dora.Interception(github地址,觉得不错不妨给一颗星)中按照约定方式定义的拦截器可以采用多种方式注册到目标方法上.本篇文章介绍最常用的基于"特性标注"的拦截 ...

随机推荐

  1. EF实体框架之CodeFirst三

    前两篇博客学习了数据库映射和表映射,今天学习下数据库初始化.种子数据.EF执行sql以及执行存储过程这几个知识. 一.数据库初始化策略 数据库初始化有4种策略 策略一:数据库不存在时重新创建数据库 D ...

  2. [USACO2003][poj2112]Optimal Milking(floyd+二分+二分图多重匹配)

    http://poj.org/problem?id=2112 题意: 有K个挤奶器,C头奶牛,每个挤奶器最多能给M头奶牛挤奶. 每个挤奶器和奶牛之间都有一定距离. 求使C头奶牛头奶牛需要走的路程的最大 ...

  3. javascript继承(七)—用继承的方式实现照片墙功能

    照片墙DEMO下载 注意:图片有四种类型:1可放大:2可拖动:3既可放大也可拖动:4都不行.由于每个图片的构造函数不同而不同(目前在火狐上调试的,其它的浏览器可能不行,请见谅,主要讲继承的思想.以后会 ...

  4. 第二十八课:focusin与focusout,submit,oninput事件的修复

    focusin与focusout 这两个事件是IE的私有实现,能冒泡,它代表获得焦点或失去焦点的事件.现在只有Firefox不支持focusin,focusout事件.其实另外两个事件focus和bl ...

  5. android 通过帧动画方式播放Gif动画

    注意:经过本人测试,这个方法很耗内存, 图片一多就崩了.慎用 <1>用工具(photoshop或者FireWorks)将GIF动画图片分解成多个GIF静态图片,然后保存在res\drawa ...

  6. Ibatis学习总结4--SQL Map XML 映射文件扩展

    SQL Map XML 映射文件除了上文提到的属性还有一些其他重要的属性,下文将详细介绍这些属性. 缓存 Mapped Statement 结果集 通过在查询 statement 中指定 cacheM ...

  7. 网站性能工具Yslow的使用方法

    Yslow是雅虎开发的基于网页性能分析浏览器插件,从年初我使用了YSlow后,改变了博客模板大量冗余代码,不仅提升了网页的打开速度,这款插件还帮助我分析了不少其他网站的代码,之前我还特意写了提高网站速 ...

  8. window.parent ,window.top,window.self 详解

    在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口, opener是用open方法 ...

  9. python 学习笔记3(循环方式;list初始化;循环对象/生成器/表推导;函数对象;异常处理)

    ### Python的强大很大一部分原因在于,它提供有很多已经写好的,可以现成用的对象 16. 循环方式笔记: 1)range(0, 8, 2)   #(上限,下限,步长)  可以实现对元素或者下标的 ...

  10. BZOJ1001 狼抓兔子(裸网络流)

    Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...