Huihoo.org - Open Source Middleware Foundation

Last Modified: 2003.06.10

Rtcorba中的优先级


Jun,2003
Cocia Lin(cocia@163.com)
Huihoo.org

rtcorba规范中,很重要的一部分努力,就是要求一个用户操作能实现用户可预期的行为方式。这其中,对优先级规则的严格约束就是其中的一部分。 本文对rtcorba中的优先级控制的作一介绍,使读者对rtcorba的远程调用过程中的优先级的控制有一个认识和理解。

Rtcorba中的优先级作用过程

client server

app->orb->cdr->giop .....->tcp->..... giop->cdr->orb->poa->servant

一个调用请求首先从客户端应用程序发起。请求被发送给rtorb,rtorb根据客户端sub,对请求参数进行数据编码,使它符合giop的数据格式。在进行编码的过程中,用户定义的优先级信息也包含在其中。giop协议根据用户定义的优先级要求,对请求进行处理。处理的方式包括:请求排队,缓冲,超时控制,启用私有连接等等。giop的具体实现最常用的就是iiop了。在iiop中进行了实时控制,通常称为riop(TAO中这么称呼),但是rtcorba并没有这样的名称,或者说rtcorba没有给这个协议起名字。我们命名riop。

客户端的请求,现在已经被编码成为riop协议的格式了,通过tcp协议进行传输。

使用tcp来传输实时信息,不是太合适,因为tcp本身的设计和实现,对于实时的特性考虑很少。将实时信息交给tcp协议之后,多少有点不受控制。现在也有很多的rtcorba开发者对于基于tcp的riop颇有异议。但是从tcp的普及程度而言,这样做,也是有意义的。这让更多的场合有可能使用rtcorba带来的好处,虽然不是很完美。

客户端的调用请求在tcp上进行传输,通过网络,到达riop的服务器端。Riop对这些消息,根据优先级和其他控制信息,进行请求缓存排队。对riop消息进行解码,转换成cdr可读的信息,通过cdr可以得到我们需要的数据类型,数据结构,包括对象。服务器端的orb来进行总体控制,根据已经在orb中注册的poa信息,和通过cdr中获得的对象请求,找到请求所需要的poa,将请求交给poa。Poa这里再次对请求进行缓冲排队处理。调用请求的服务器端对象的servant已在poa中注册,根据请求,找到这个servant,将请求交给servant,进行实际的应用逻辑处理。处理之后的返回过程,和调用过程相似,这里就不详细介绍了。

Rtcorba中的优先级策略

Rtcorba中的优先级策略,有两种模式:
1.客户端传播优先级模式Client Propagated Priority Model
2.服务器定义优先级模式Server Declared Priority Model

客户端传播优先级模式Client Propagated Priority Model

这种模式中,是以客户端的用户定义的优先级为准,对调用操作进行优先级设置。包括客户端的线程优先级,giop中的优先级和服务器端的orb,poa,servant优先级。Propagated有繁殖传播的意思,也就是说,客户端的调用请求所经过的所有地方,都要被感染,变成和调用一样的优先级,并且在线程被感染之后,能够继续感染其他的线程,将所有的子线程优先级都改变。就像传染病一样传播。客户端传播的模式,为开发者提供了很灵活的优先级定义方式。

服务器定义优先级模式Server Declared Priority Model

这种模式中,操作的优先级由服务器端定义。也就是说,在对象初始化的时候就为对象设置好的优先级级别。从客户端传递过来的调用请求,按照预先设置好的优先级进行调用运行。这里的优先级,包括了客户端和服务器端,都是用了统一的优先级。这种模式相对来说也比较简单和容易理解。

两种模式混合的情况

一个对象被设置为服务器端定义模式,而第二个对象被设置为客户端传播模式。当第一个对象调用第二个对象的时候,怎么办呢?按照服务器端定义模式规定,第一个对象应该要求第二个对象按照第一个对象的优先级进行运行;而按照客户端传播模式,第一个对象在调用第二个对象的过程中,将把所有的第二个对象的子线程优先级改变。当第二个对象在运行过程中,有可能被改变优先级,那么所有和第二个对象相关的线程的优先级都要改变,包括第一个对象中的相关线程。但是,如果按照客户端传播模式的方式传播的话,所有的第一个对象的子线程的优先级也都要改变,这又和第一个对象的服务器端定义模式冲突。所以,rtcorba规定,这种情况下,第二对象只能改变第一个对象的当前优先级,而不能改变和第一个对象相关的子线程的优先级。

结束

这里粗略的介绍了一下rtcorba中的优先级的作用方式和影响到的环节。供大家学习讨论

参考

Real-Time CORBA Specification
http://www.omg.org/technology/documents/formal/real-time_CORBA.htm

开放企业基金会
http://www.huihoo.org