- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
关于COM组件边界和同步的研究与分析-05
第五讲 关于COM+组件边界和同步的研究与分析
本讲围绕COM+对象的三种边界环境:进程、套间和上下文,分析了实现跨越这些边界调用的机制,论述了COM+在不同环境中实现并行保护的策略。
引言
COM+可以看作是COM、DCOM和MTS的集成和发展,它把COM组件提升到应用层而不再是底层的软件结构,把底层细节留给操作系统,使COM+与操作系统的结合更加紧密。COM+的底层结构仍然是以COM为基础,但在应用方式上更多地继承了MTS的处理机制,包括事务机制、安全模型、对象池等,同时新增了一些服务,比如负载平衡、事件模型、队列组件等,使得COM+成为适合构建多层分布式的组件技术。
COM+程序设计方法的核心是基于对属性值进行声明请求的模型。COM+运行时系统将根据组件设置的属性来实例化对象,并把对象装入相匹配的执行环境中运行。我们可以把执行环境看作是一组具有相容属性的对象运行时所处的环境,它相当于给运行其中的对象构筑一道边界。每一个COM+对象在外围具有三道这样的边界:进程、套间(apartment)和上下文(context),在它的整个生存期它只能生存于某一进程、某一套间和某一上下文中,也就是说一个COM+对象不能越过自己的边界进入另一执行环境中。当进行跨边界(包括跨进程、同一进程中跨套间和同一套间中跨上下文)调用时,调用者和被调用的对象之间必须加入代理机制,只有处于同一上下文中的对象才能进行直接调用。
虽然多线程技术可以显著地提高应用程序的性能,但隶属于同一进程的线程由于可以对共享地址空间内的数据进行并行访问,这将很容易产生竞争情况。竞争情况可以通过对共享数据实施串行化访问,即进行同步处理来加以避免。在COM+中有两种方法可以实现对对象的串行化访问;一种方法是由系统自动实现对COM+对象成员函数的串行化访问,它保证下一次方法调用在上次调用完成后才可进行;另一种方法是使用事件、互斥变量、监界区和信号量等机制来保护共享数据。针对处于不同边界中的对象和各种跨边界调用,COM+采用不同的策略来进行同步处理。
跨进程调用与同步
由于不同的进程使用不同的地址空间,所以客户不能直接调用进程外组件(包括本地进程外组件和远程组件)。对于跨进程调用,中间必须经过代理/存根(proxy/stub)机制和使用列集/散集(marshaling/unmarshaling)手段。
图1 跨进程调用
如图1所示,代理对象在客户进程中扮演组件对象,它具有与组件对象一样的接口,但不提供方法实现。客户实际调用的是代理对象,代理对象负责把调用参数及其它一些调用信息组装成一个数据包,并通过RPC/QC通道列集给组件进程中的存根代码,存根代码负责把包散集到组件进程的地址空间中,并进行实际的接口功能调用,函数的返回值和输出参数按相反的顺序传回给客户。
对于进程外组件对象,客户调用必须跨越进程边界,因此调用始终是间接进行的,中间必须经过调度,而这种调度自动实现了对调用的串行化访问,对象成员函数可以不处理同步。
套间与同步
为了适应多线程的需要,COM+为此提供了一种称为套间的结构。我们可以把套间想象成一个盒子,里面装着线程和组件对象,每一个要使用COM的线程和每一个这些线程创建的组件对象都必须属于某一个套间。一个套间只能属于某一个进程,且不能跨越进程边界。
目前COM+支持三种套间,它们是单线程套间(STA:single-threaded apartment)、多线程套间(MTA:multithreaded apartment)和中性套间(TNA:thread-neutral apartment)。一个进程可以包含一个MTA、一个TNA和多个STA。
一个STA中只能容纳一个线程,但COM对于里面包含的组件对象个数并未限制,STA中的对象只能由该套间中唯一的线程来调用。当线程调用CoInitialize()或CoInitializeEx(NULL,COINIT_APARTMENTHREADED)函数时,COM将构建一个新的STA,并把这个线程赋予新创建的STA。同时自动地调用CreateWindowEx来为STA创建一个隐藏窗口,客户对套间中对象的调用被当作一个发给此隐藏窗口的消息,套间线程主函数的消息循环负责接收消息并分发消息,于是隐藏窗口会接收到消息,然后它的窗口过程调用对象的相应接口成员函数。通过这种消息分发机制自动实现了对STA中对象调用的同步,所以运行在STA中的组件对象不必处理同步,但对象仍需保护全局变量,因为一个组件可以在多个套间中创建实例,它们有可能被同时访问。
MTA中的线程没有个数的限制,也没限制所包含的对象个数,任何线程都可以通过调用CoInitializeEx(NULL,COINIT_MULTITHREADED)函数来进入MTA。MTA没有
您可能关注的文档
- 中考试题汇编之水浒.doc
- 临床医学个人简历自荐信完整版.doc
- 临床医学检验中级考试-临检.doc
- 临床医学毕业技能考试.doc
- 中诺录音电话g025b说明书.doc
- 临床医师三基考试4.doc
- 临床执业医师历年重点必考之200分.doc
- 临床医学个人简历自荐信.doc
- 串并联电路电路中电流的规律.doc
- 中考必备三角形的五个“心”及一些平面几何的著名定理.doc
- 10《那一年,面包飘香》教案.docx
- 13 花钟 教学设计-2023-2024学年三年级下册语文统编版.docx
- 2024-2025学年中职学校心理健康教育与霸凌预防的设计.docx
- 2024-2025学年中职生反思与行动的反霸凌教学设计.docx
- 2023-2024学年人教版小学数学一年级上册5.docx
- 4.1.1 线段、射线、直线 教学设计 2024-2025学年北师大版七年级数学上册.docx
- 川教版(2024)三年级上册 2.2在线导航选路线 教案.docx
- Unit 8 Dolls (教学设计)-2024-2025学年译林版(三起)英语四年级上册.docx
- 高一上学期体育与健康人教版 “贪吃蛇”耐久跑 教案.docx
- 第1课时 亿以内数的认识(教学设计)-2024-2025学年四年级上册数学人教版.docx
最近下载
- 7.2 类比推理及其方法-高中政治课件 (统编版选择性必修3).pptx VIP
- 《数学物理方程-福州大学-江飞》作业chapter1.pdf VIP
- 重庆渝北中交·中央公园 C96, C98-1 地块山地新中式商业街项目 GOA.pdf
- 2024年江苏省高考物理真题试卷含答案.pdf VIP
- 《数学物理方程-福州大学-江飞》数学物理方程A.doc VIP
- 《数学物理方程-福州大学-江飞》作业chapter2.ppt VIP
- 《数学物理方程-福州大学-江飞》第四章.doc VIP
- 《数学物理方程-福州大学-江飞》数学物理方程A答案.doc VIP
- 2023年辽宁省检察系统招聘聘用制书记员考试真题及答案.docx VIP
- 2024年高考真题——物理(河北卷)含答案.pdf VIP
文档评论(0)