Chinaunix首页 | 论坛 | 博客
  • 博客访问: 114845
  • 博文数量: 16
  • 博客积分: 936
  • 博客等级: 准尉
  • 技术积分: 170
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-03 16:16
文章分类

全部博文(16)

文章存档

2015年(2)

2014年(1)

2012年(2)

2011年(2)

2010年(9)

分类:

2010-12-13 20:54:33

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被填充之后,它的链表结构类似如下:



阅读(2704) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~