COM多线程模型与DCOM详解

需积分: 9 2 下载量 168 浏览量 更新于2024-08-19 收藏 374KB PPT 举报
"本文主要探讨了COM(Component Object Model)的多线程模型以及DCOM(Distributed Component Object Model)的相关概念,由作者潘爱民分享。内容包括COM线程模型、DCOM的基本结构、对象激活、连接管理、并发管理和DCOM安全模型。此外,还回顾了COM的聚合和跨进程模型,以及自定义代理对象和标准列集的proxy和stub结构。" 在COM(组件对象模型)中,多线程模型是关键的组成部分,它定义了不同线程如何访问和交互COM对象。标题中的“STA套间”指的是单线程公寓(Single Thread Apartment),这是一种线程模型,其中所有的COM对象都在同一个线程中运行。在STA中,创建的COM对象都属于这个公寓,这意味着它们的方法调用不会遇到线程同步问题,因为只有一个线程能调用这些对象。然而,对于像DllGetClassObject和DllCanUnloadNow这样的DLL程序引出函数,仍然需要进行同步处理,因为这些函数可能被不同线程调用。 类厂(Class Factory)是创建COM对象的关键,它是否需要线程安全取决于其设计策略。如果类厂是线程安全的,那么它可以在多线程环境中正确地创建对象。在STA中,由于对象的调用只发生在同一线程内,所以类厂通常不需要特别的线程同步机制。 COM对象的接口指针传递有两种方式:自动marshaling和手工marshaling。自动marshaling是系统默认的行为,它处理接口指针在进程间的传递,使得对象能够在不同线程或进程中被调用。手工marshaling则需要程序员显式地处理接口指针的序列化和反序列化,以便在不同的上下文中使用。 DCOM是COM的一个扩展,允许组件跨越网络进行通信。它包含了几个核心概念,如基本结构(涉及到对象的标识和定位)、对象激活(描述如何实例化远程对象)、连接管理(维护客户端与服务器之间的连接)、并发管理(处理多线程环境下的并发访问)以及安全模型(确保跨网络的通信安全)。DCOM通过代理对象和存根代码实现跨进程通信,代理对象在客户端进程,存根代码在服务器进程,它们协同工作以完成接口调用。 自定义列集是优化跨进程调用的一种方法,对象实现IMarshal接口以控制其自己的marshaling过程,而代理对象也需实现该接口来配合对象。这样可以提高效率,例如通过缓存状态,或者实现marshal-by-value。标准列集的proxy和stub结构则由系统提供,简化了跨进程调用的实现,它们处理了接口的序列化和反序列化,使得客户端和服务器端可以进行有效通信。 这篇内容深入讲解了COM和DCOM中的多线程模型、对象激活、并发管理等多个方面,是理解COM组件以及分布式系统架构的重要资料。