COM对象选择服务器模式的描述

转载 2007年09月11日 23:59:00

COM使用与Win32同样的线程机制。它使用Win32 API来创建和同步线程。但线程模型在Win32COM中是不尽相同的。

  Win32线程模型Win32定义了两类线程。用户界面线程和工作者线程。Win32中的每个进程都可以拥有一个或多个用户界面线程和/或多个工作者线程。用户界面线程有消息循环,接受发送到窗口的消息,因此也和一个或多个窗口有关联。工作者线程用于后台处理,不与任何窗口相关联。作为开发者,使用Win32线程时,要注意另外一个主要的不同点。用户界面线程总是拥有一个或多个窗口。当有消息传递给特定的窗口时,用户界面线程负责调用合适的方法。消息循环在同一个用户界面线程中执行,而不理会是哪一个线程发来的消息,所以Windows可以保证同步的正确执行。编程人员不需要为线程同步写附加的特殊代码。然而,如果你开发工作者线程的话,就必须自己处理线程同步,防止死锁或非同步的情况出现。

  COM线程模型在COM中,线程的含义有些微差异。总共有三类COM线程模型。即:ApartmentFreeRental线程(为MTS引入)。与Win32最类似的是用户界面线程相当于Apartment线程模型,而工作者线程相当于Free线程模型。

  Apartment线程模型(单线程Apartment

  此类线程模型在Windows NT3.51和稍后的Windows 95中作为COM的第一个版本引入。Apartment线程模型由一个多线程进程组成,其中每一线程只包括一个COM对象。单线程ApartmentSTA——也表示每个线程只能被一个Apartment调用,每个Apartment都是单线程的。所有的调用都通过Win32消息机制实现。COM保证这些调用的同步。每个线程都有自己的Apartment或者执行关系,在任一时刻只能有一个线程访问这个Apartment.Apartment中的线程只接受来自同一Apartment中其它线程的调用。调用参数需经过Apartment之间的Marshall处理。COM负责在Windows消息机制中处理Apartment间的Marshall过程。

  Free线程模型(多线程Apartment

  此类模型由Windows NT4.0Windows 95 DCOM引入,允许多个线程访问单个COM对象。使用Free线程的COM对象必须保证线程同步并且实现线程敏感的消息句柄,保证线程安全。调用不能通过Win32消息机制实现,也不能由COM来同步线程,因为同一方法可能在同一时间被多个进程访问。使用Free线程的对象应该能随时处理来自其它线程的方法调用,以及处理来自多线程的同时调用。参数直接传递到任意线程,因为所有的Free线程在同一Apartment中存在。这也称之为多线程ApartmentMTA)。

  ApartmentFree线程模型并存一个进程可能同时拥有ApartmentFree线程模型。唯一的限制是只可同时拥有一个Free线程模型,但可以有多个单线程Apartment.Apartment之间的指针和数据传递需经过Marshall处理。调用STA中的对象方法将由Win32保证同步,调用MTA中的对象方法则完全不经过同步处理。

  Thread Neutral Apartment模型使用Thread Neutral ApartmentTNA)的组件将自己标记为FreeBoth模型。这里组件的实例配合调用者线程而使用调用者线程的模型。COM类对象的实例能在每次被调用时使用不通的线程模型。当线程执行COM对象中的方法,且此方法创建一个新对象时,MTS将暂停当前线程,创建一个新线程来负责对创建对象的处理。和MTA一样,TNA允许多个线程进入一个Apartment.但是,每当一个线程进入Apartment时,将锁定进入的Apartment,仅当退出时才允许其它线程进入。此类线程模型被引进MTSCOM+的原因是保证上下文切换速度。

 

相关文章推荐

關於 ATL COM 開發中遇到的"ATL COM automation 服务器不能创建对象"問題

對微軟相當無語,自己搞了個插件框架,搞得想寫個通用的plugin蛋疼死,杯具啊,今天這個問題搞了我整整一天,網上幾乎沒相關提示,結果就是MS所謂的安全問題: 要讓你的控件是安全的。。。 #inc...

COM对象创建过程总结

  • 2015-03-04 12:58
  • 16KB
  • 下载

Linux/Unix服务器套接字编程异步I/O模式选择

最近做一个套接字编程的应用,服务器使用Unix。 对于套接字异步的选择,一般有两种模式,一种是对每个新到来的连接都创建一个线程(pthread),可以使用线程池对其进行管理; 另外一种是使用单进程下的...

COM对象模块.ec

  • 2014-09-06 02:03
  • 15KB
  • 下载

DCOM揭秘之六——远程COM调用(服务器端和客户端)

DCOM揭秘之六 2001-08-23 09:27作者:QQ新人类出处:Yesky责任编辑:方舟    Distributed COM --跨网络工作   ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)