IE8 松散耦合进程框架(Loosely-Coupled IE (LCIE)--特性介绍
官方介绍: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好了不少。
转载于:https://www.cnblogs.com/gdutbean/p/3230180.html
IE8 松散耦合进程框架(Loosely-Coupled IE (LCIE)--特性介绍相关推荐
- 移动周刊第 177 期:Android 新特性介绍、iOS 客户端框架演进
写在前面 本期移动周刊第 177 期如约而至,聚焦 Android.iOS.VR/AR/MR.直播等前沿移动开发技术,收录一周最热点,解读开发技巧,我们希望从中能够让你有一些收获,如果你有好的文章以及 ...
- 实现类似IE的松散耦合(Loosely-Coupled )效果——Window Tabifier
在IE8开始,就是用了一种称作松散耦合 IE (LCIE)的技术,基本原理就是使用不同的 iexplore.exe 进程实例来提供增强的独立性和可靠性.IE 的帧窗口和 tabs 运行在不同进程中,这 ...
- 用于松散耦合的分布式系统的Chubby锁服务器
文章目录 摘要 1. 简介 2. 设计 2.1 理由 2.2 系统架构 2.3 文件,目录和句柄 2.4 锁和序列生成器 2.5 事件 2.6 API 2.7 缓存 2.8 会话和KeepAlives ...
- ML:MLOps系列讲解之《MLOps原则之监控/“机器学习成绩”系统/可再现性/松散耦合架构(模块化)/基于ML的软件交付指标/MLOps原则和实践的总结》解读
ML:MLOps系列讲解之<MLOps原则之监控/"机器学习成绩"系统/可再现性/松散耦合架构(模块化)/基于ML的软件交付指标/MLOps原则和实践的总结>解读 目录
- ML:MLOps系列讲解之《MLOps原则—迭代增量过程/自动化/持续部署/版本控制/实验跟踪/测试/监控/“ML成绩”系统/可再现性/松散耦合架构(模块化)/基于ML的软件交付指标等》解读
ML:MLOps系列讲解之<MLOps原则-迭代增量过程/自动化/持续部署/版本控制/实验跟踪/测试/监控/"ML成绩"系统/可再现性/松散耦合架构(模块化)/基于ML的软件 ...
- 使用URI设计松散耦合的Metro应用程序
Metro风格应用程序意味着小型且高度集中.对于我们传统上为企业建立的.大规模的.单一的应用程序而言,我们可把它们重新想象成工作流的特定工 具.例如,你可能使用某款股票交易应用程序中的工具来查找并查看 ...
- Building Loosely Coupled and Scalable RESTful Services using Orleans
These days, I'm working on Orleans and Actor-based systems as I mentioned in my post titled "Ov ...
- 理解SOA的松散耦合与紧密耦合
SOA的一项关键特性就是使用松散耦合连接.传统上,应用程序与应用程序之间或者应用程序与服务之间的连接是紧耦合的,如用CORBA(公共对象请求代理体系结构)那样.此差异是很重要的. < XML S ...
- python多进程通信manager_python中进程间数据通讯模块multiprocessing.Manager的介绍
本篇文章给大家带来的内容是关于python中进程间数据通讯模块multiprocessing.Manager的介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 目前开发中有遇到进程 ...
最新文章
- C++11新特性之defaulted函数
- 【Kick Algorithm】十大排序算法及其Python实现
- .NET 5 Preview 1的深度解读和跟进
- 【Flink】大数据分析常用去重算法分析『HyperLogLog 篇』
- matlab字符串元胞数组,MATLAB字符串数组元胞数组和构架数组
- [Js-Java SE]文件/文件夹复制(递归)
- 奎享添加自己字体_如何添加字体?系统字体的两种方法添加方法
- build lavas 失败_vue lavas的项目在IE下显示空白
- oracle 取前行,【企业信息化研究所】TF-SWUFE Oracle Club抵着寒风前行—甲骨文俱乐部第九周分享会...
- VC中鼠标移动点击操作
- NDK Resolution Outcome: Project settings: Gradle model version=XXX, NDK version is UNKNOWN
- 浏览器内核 css浏览器的兼容性写法
- sturts2框架知识点(Struts2框架----今天脑子有点炸)
- Clojure Web开发–最新技术–第2部分
- 胡喜:我是如何从菜鸟做到架构师(转)
- 神级程序员教你用代码哄好生气的女朋友,网友:我要甜甜的恋爱!
- 基于Windows 系统VS C++环境下配置UR-RTDE库
- 程序无法启动因为计算机丢失msvcr110,解决启动Apache时出现因为计算机丢失MSVCR110.dll文件...
- idea的Terminal的git提示密码,修改git配置文件配置
- rtorrent 安装