任务的生命周期:

put命令可以创建一个任务。整个任务生命周期包含:ready, reserved, delayed, 或者 buried. 当生产者执行了put命令后,任务进入ready状态,被放到了ready队列中,一直到有消费者执行 reserve 命令。如果任务在ready队列队首,它将被消费者取走。任务进入reserved状态。消费者执行这个取走的任务,当执行结束后消费者将发送delete命令 删除任务。

 

下面是上述任务的生命周期图:


 put            reserve               delete
-----> [READY] ---------> [RESERVED] --------> *poof*

 

下面是更多的设计所形成的生命周期图:

 

  put with delay               release with delay
  ----------------> [DELAYED] <------------.
                        |                   |
                        | (time passes)     |
                        |                   |
   put                  v     reserve       |       delete
  -----------------> [READY] ---------> [RESERVED] --------> *poof*
                       ^  ^                |  |
                       |   \  release      |  |
                       |    `-------------'   |
                       |                      |
                       | kick                 |
                       |                      |
                       |       bury           |
                    [BURIED] <---------------'
                       |
                       |  delete
                        `--------> *poof*

 

整个系统拥有一个或者多个tube.每一个tube包含一个ready队列和一个delay队列。每一个任务在一个tube里面完成其整个生命周期。消费者可以利用watch命令关注其感兴趣的tube。利用ignore来取消对某一个tube的关注。感兴趣的tube的集合可以认为是消费者的 watch list. 当客户端利用 reserve命令从系统中取任务的时候,任务可以来自于其watch list里面任意一个。

 

当客户端连接成功以后,它的watch list初始只有名字叫default的tube。如果客户端没有执行国 use命令,默认情况下watch list 中只有 default bute。

 

当客户端需要的时候tube将会被创建,如果tube是空的(没有ready, delayed, 或者 buried 任务)或者没有客户端连接的时候,它将被删除。