一剑飞虹

道可道非常道,名可名非常名
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[转]队列任务模式

Posted on 2007-01-31 09:05  greatqn  阅读(317)  评论(0编辑  收藏  举报

多读取器队列

多读取器队列是一种扩展异步应用程序的最有效的方式。为证明这一点,我将通过大家都熟悉的两个示例说明如何进行排队。

在杂货店排队

大多数杂货店都可以增设多个队列。每个收银台都有其自己的队列,因此要购买某些商品,您需要选择一个队列。如果您像我一样,大多数时候选择的队列中都有一个满载而归的顾客排在您前面,他/她购买的很多商品都需要核实价格,而且要使用第三方远期支票进行付款。在轮到您结帐之前,可能在您开始排队时还没有出门的顾客都已经为他们购买的商品付完了款。这个例子说明了使用多个队列时的一个问题:即,如果排在前面的任务需要很长时间才能处理完,后面的任务将无法得到及时处理。

使用多个队列的另一个主要问题是,添加一个队列后需要在各队列之间重新分配任务,在队列之前来回移动任务可能会浪费很多时间。还以上面的杂货店为例,当一个新的收银台开始工作时,想象一下许多顾客推着购物车蜂拥而至的场面吧。

在机场排队

虽然航空公司并非高效率的典范,但大多数售票点的工作效率都比杂货店要高,这是因为多个票务代理都在为一个队列服务。由于只有一个队列,因此您不必担心排错了队。如果某个乘客占用了较长的时间,其他票务代理仍可以继续为其他乘客服务(假定有多个票务代理)。

具有多个读取器的一个队列也可以轻松扩展。如果队列太长,可以增加代理而不必打断队列。某些代理也可以在接待完当前乘客后离开,而不会在队列中造成混乱。