ACE_Dynamic_Message_Queue 是一个继承自ACE_Message_Queue的子类,它使用adapter模式对ACE_Message_Queue的行为进行适配,以便于它可以为每个入队的ACE_Message_Block维护它的动态“优先级”,并且根据这些“优先级”来管理queue的先后顺序。
在queue里的每个message都被这样管理着以便于每次针对queue的enqueue和dequeue操作的开销都保持在一个很小的量级上。 基于上述原因,在队列的链表中的每个message的先后顺序并不是严格按照它们的优先级排序的。随着时间的推移,一个message的状态从pendding状态跃迁到late状态,并最终进入到beyond late状态。为了使基于上述设计思路的message-reordering开销最小化,给message的链表划分了三个相对独立的边界,一个message最先从pending 部分的head入队,然后再从late 部分的head入队,最终从beyond late部分的head入队。这样,我们只需要维护这三个边界部分就足够了(事实上这个很容易高效的完成了,就像老的消息按照这些message的状态跃迁的方式维护同一个链表顺序一样which can be done
efficiently, as aging messages maintain the same linked list order as
they progress from one status to the
next),这样就可以在不做"re-ordering"这个message queue的情况下提供了正确的按“优先级”入队的语义。
在pending部分的message的优先级会根据某种指定的动态策略变化为late状态,并向前移动进入到late部分的queue,同样的,在
late部分的message的优先级会变成later,进而向前移动到beyond late部分。当message
queue被填充之后,它的链表结构类似如下:
阅读(2745) | 评论(0) | 转发(0) |