COM组件概念---线程模型

COM提供的线程模型共有三种:

Single-Threaded Apartment(STA 单线程套间);

Multithreaded Apartment(MTA 多线程套间);

Neutral Apartment/Thread Neutral Apartment/Neutral Threaded Apartment(NA/TNA/NTA 中立线程套间,由COM+提供)。

解释:

STA: 一个对象只能由一个线程访问(通过对象的接口指针调用其方法),其他线程不得访问这个对象,因此对于这个对象的所有调用都是同步了的;这个模型很像Windows提供的窗口消息运行机制,因此这个线程模型非常适合于拥有界面的组件,像ActiveX控件、OLE文档服务器等,都应该使用STA的套间。

 MTA  一个对象可以被多个线程访问,即这个对象的代码在自己的方法中实现了线程保护,保证可以正确改变自己的状态。这对于作为业务逻辑组件或干后台服务的组件非常适合。

NA  一个对象可以被任何线程访问,与MTA不同的是任何线程,而且当跨套间访问时(后面说明),它的调用费用(耗费的CPU时间及资源)要少得多。

 

形象表达:

 

公寓(Apartment)有的译文译作"套间"。这个术语抽象的是COM对象的生存空间,你还真的可以想象成公寓,线程就是住在公寓里的人。

单线程公寓(Single-Threaded Apartment STA) 这种房间是供有钱人住的单人间,设备齐全,服务周到。

多线程公寓(Multithreaded Apartment MTA) 住在这种房间里的人条件就差多了,那么多人就挤在一个大房间里头,可是他们自强不息。个个健壮得不得了。

 

在Windows中COM的线程模型在建立在Win32线程模型的基础上的。

 

1、公寓, COM 决定支持强大的多线程,于是引入了这个概念,公寓决定了线程与外界通信的方式每一个与COM对象打交道的线程必须先决定要进入哪种公寓。

2、单线程公寓,这种公寓本身只能包含一个线程,通过调用CoInitialize(NULL)进入。对该公寓中线程所拥有的COM对象的调用被队列化,只有当一个调用结束后,另个调用才会开始。

3、多线程公寓,这种公寓可以包含任意多的线程(具体数目由操作系统决定)。一个进程里头只能包含一个这种公寓,所有调用CoInitializeEx(NULL, COINIT_MULTITHEADED)都会进入这个公寓。对该公寓中线程所拥有的COM对象的调用是直接的(先不考虑跨进程的情况),包括本公寓中的线程与其它的STA线程。

 

 

单线程公寓与多线程公寓 的本质差别有哪些?

单线程公寓实现同步,有很多COM库的干预,包括将外部的调用转化成窗口消息,然后那个特别的隐藏窗口的窗口函数把窗口消息转化成COM对象的函数调用。这样的模型可以减小开发组件的难度,可是,却牺牲了效率。

多线程公寓把实现同步任务全部交给了组件自己,所以在这种公寓中生存的COM对象必须足够健壮,考虑各种同步问题,不至于多个线程在调用对象的成员函数时会打架。

 

公寓,线程,对象的关系

公寓是这里面最大的单位,它是线程的容器。

如果调用CoInitialize(0),COM库会创建一个STA(注意,是"创建"),你的线程将属于这个公寓,并且是这个公寓的唯一成员。

如果CoInitializeEx(NULL, COINIT_MULTITHEADED),而且是第一个要求进入MTA的线程,COM库会创建一个MTA,其它后面调用CoInitializeEx(NULL, COINIT_MULTITHEADED)的线程会直接进入(注意,我用的"进入")已有MTA。本来线程是一个运行的实体,不会分配资源,可是在 COM的线程模型里一个对象与创建它的线程是紧密相关的,称对象归属于某个线程,至于这种归属关系是在COM库内怎么管理,我们先不去管它,以后我们把线程A创建的对象说成是线程A的对象就行了(有一个例外,得说说,有一种Single 类型的COM对象,这种对象基实就是COM在提出线程模型前的产物,这种对象总是归属于主STA线程,即第一个调用CoInitialize(0)的线程。)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: COMComponent Object Model)是微软公司开发的一种面向对象的组件对象模型。它是一种可用于编写和调用应用程序的平台和语言无关的技术,具有广泛的应用。COM可以使不同的软件组件相互通信和交互,实现代码的复用和模块化开发。COM技术内幕-微软组件对象模型 PDF是一本关于COM技术的书籍,通过介绍COM技术的原理、架构和编程接口,帮助读者深入理解COM技术的内部工作原理和应用方法。 COM技术内幕-微软组件对象模型 PDF可以帮助读者了解COM的基本概念和核心概念,如COM对象、接口、类工厂等。它还介绍了COM对象的生命周期和内存管理,以及如何使用COM接口进行对象之间的通信和交互。此外,该书还讲解了COM线程模型、注册表、组件的版本管理和卸载等相关内容。 通过阅读COM技术内幕-微软组件对象模型 PDF,读者可以深入了解COM技术的实现细节和应用技巧,掌握COM的高级编程技巧,提高软件开发和设计的效率。这本书适合有一定编程基础的读者阅读,特别是那些对COM技术感兴趣并希望进一步学习和应用的人员。 总之,COM技术内幕-微软组件对象模型 PDF是一本关于COM技术的详细指南和参考书,它可以帮助读者深入理解COM技术的内部工作原理和应用方法,提高软件开发和设计的技能水平。 ### 回答2: COM技术内幕-微软组件对象模型Component Object Model,简称COM)是一种面向对象的软件组件模型,由微软公司开发,用于实现软件组件的互操作性。它在Windows操作系统中被广泛应用,为开发人员提供了一种在不同平台和编程语言之间交互的标准接口。 COM技术内幕-微软组件对象模型的PDF是一本介绍COM技术的相关文档。它详细讲解了COM的原理、架构、编程模型和相关的API,介绍了COM组件的开发、注册和部署等方面的知识。 这本PDF不仅适合初学者学习COM技术,也适合有一定基础的开发人员进一步深入了解COM的内部实现和高级特性。它可以帮助开发人员理解COM组件的生命周期、接口的多态性、对象模型的设计原则等重要概念。 此外,这本PDF还介绍了COM组件与.NET和Java等现代开发平台之间的互操作性。它解释了如何在COM组件和这些平台之间进行数据交换、方法调用等操作,为开发人员提供了实现跨平台开发的方法和技巧。 总之,COM技术内幕-微软组件对象模型的PDF对于想要深入理解和应用COM技术的开发人员来说是一本很有价值的参考资料。通过学习这本PDF,开发人员可以更加高效地开发和管理COM组件,提高软件的可复用性和扩展性。 ### 回答3: COMComponent Object Model)是微软公司开发的一种软件组件技术,用于实现软件的组件化开发和复用。COM技术内幕-微软组件对象模型COM Internals - Microsoft Component Object Model)是一本介绍COM技术的PDF文件。 该PDF文件主要讲解了COM的原理、架构和用法。首先,它介绍了COM的产生背景和发展历程,让读者了解COM的起源和重要性。然后,它详细解释了COM的基本原理和核心概念,如COM对象、接口、类工厂等,帮助读者理解COM组件的结构和运作方式。 接着,该文件介绍了COM的编程模型,即如何使用COM来开发软件。它详细解释了COM的接口定义语言(IDL)和对象创建的过程,以及如何在不同编程语言(如C++、C#等)中使用COM进行开发。 此外,该PDF文件还讨论了COM的生命周期管理、线程安全性和版本控制等重要概念。它指导开发者如何正确地创建、使用和释放COM对象,并提供了一些常见问题的解决方法。 最后,该文件还介绍了COM的扩展技术和相关标准,如COM+、DCOMCOM浏览器等。它展示了COM在分布式系统、Web服务和企业应用中的应用场景,帮助读者拓展对COM技术的应用范围。 总之,COM技术内幕-微软组件对象模型是一本全面介绍COM技术的PDF文件,适合想要深入了解并应用COM技术的开发者和技术爱好者阅读。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值