Application Server 线程模型问题(200分)

  • 主题发起人 主题发起人 CJ
  • 开始时间 开始时间
C

CJ

Unregistered / Unconfirmed
GUEST, unregistred user!
在开发application server发现一个问题:
一般我们使用apartment模型,因为它提供多线程。
本来我以为几个客户对同一请求是应该被同步处理的。
但是,最近发现,对于同一个COM对象,客户的请求也是依次排队的!
只有多客户请求不同的对象时,才是同步处理!!!
这样性能不是还是很差吗??
如果使用Free模型,我觉得开发会比较复杂。
不知道新的DELPHI PATCH是否支持COM+的新模型?
或者,我如何解决以上问题?
 
正在学习,关注! :)
 
Apartment包含多个COM对象,但某一时刻只有一个COM对象能进线程。
你可以在客户端建立多个线程来创建服务端的多个Apartment来实现多线程。

 
Dephi5中有一个新的Tcomponentfactory类支持多线程.
在服务器段执行应该可以了吧.
 
>Dephi5中有一个新的Tcomponentfactory类支持多线程.
>在服务器段执行应该可以了吧.
什么意思?详细?

>Apartment包含多个COM对象,但某一时刻只有一个COM对象能进线程。
Quite Right!
>你可以在客户端建立多个线程来创建服务端的多个Apartment来实现多线程。
但问题是:我的做法是:建立一个对象和客户打交道,这个对象又调用其它对象来
获得/更新数据。可是,如果使用apartment模型,这个和用户大交道的对象在同
一时刻只能服务一个客户!也就是说,当有10个客户连接应用程序服务器时,最后
一个客户一定要等到前9个请求完成才能得到响应,这样的效率实在太差了吧?
如果再开多个现成访问这个对象,那么会造成效率更低!因为无论你开了几个客户
现成、服务器永远只能为其中之一服务,而其它现成也必须等待到前一现成结素为止
 
问题虽然蠢了点,也别不理啊?
 
同志们!对俺有意见可以提嘛,别不答俺的问题啊……
 
...
别告诉我用CORBA,俺不高兴用那东西
 
delphi不支持com+.
只有cppbuilder支持com+
 
啊?
我以前还跟人说
Delphi是除了VC外
支持所有COM线程的工具

现在看来支持也不完全啊
 
DELPHI5出来时候,COM+还没有正式公布,不晓得什么时候才能支持,看上去
满游人的

BCB5好象支持COM+,不晓得哪位用过?讲讲?
 
COM+是不需要特定的东西支持的,因为COM+ 完全就是COM规范。
你能说Delphi1.0不支持COM吗?只要任何一种语言支持用指针函数,
就可以实现COM了(汇编都可以,我的一个朋友就用汇编写过COM对象,
当然是研究性的啦)。
 
CJ:
呵呵,我现在也要用COM,并且是竟如COM后是不到程序结束是不退出来的。不过我好象
没有你说的现象。
其实,MSDN的第一张盘中有许多的COM的示例,我正在看Apartment,Free的线呈模型
的示例,不过是VC++的。 :(
 
老沈:
你试过同时用N个客户连同一对象的方法吗?我试过,可有问题!//和李维写的一样
 
1.apartment模型即STA,它不是Thread-safe.
2.Apartment(STA), Free Thread(MTA), Neutral(NTA)模型自己都不提供多线程。
它们只是标志自己是不是Thread-safe.在一个进程中可以有多个STA,但只能有一个
MTA. NTA独立于任何进程,存在于DLLHOST.EXE进程中. 在一个线程中如果建立一个
STA对象, 那么这个对象只能有这个线程直接访问,其他线程要访问这个对象需要额外
的marshal. MTA和NTA可以被所有线程访问, 但线程同步是必须的. COM+环境提供自动
的线程同步功能.
3.在Delphi5的TComponentFactory中, 对每个连接都生成一个STA对象(前提是你的
APPServer的线程模型为multi-instance apartment),并且进行marshal.
 
正在学习,听一下。
 
Hongjiang:
可以给出一些marshal示范性语句吗?
 
看看李唯的书,里面讲了。
 
看一下Delphi5的TComponentFactory和TApartmentThread的源代码就知道了.
还有,最好的参考资料是MSDN, 李维的书我的一个台湾朋友送了我一套,
不是很好.
 
94看李老人家的书看出的毛病……

>可以给出一些marshal示范性语句吗?
9494
 
后退
顶部