队列/堆栈
怎样 How-to


介绍

如果能够很好地实现库所的排队规则和堆栈规则的仿真,如:TCP通道上的通信等,那将非常有用。虽然,目前CPN Tools还不支持这个,但是建模者可以很容易地做到。

示例

image unordered.jpg

这是一个很简单的模型,其中只有发出者和接收者。

发出者,将信息包发出到网络中去。

接收者从网络中接收信息包。

堆栈

我们想要网络具有后进先出的行为(这有点不现实,但是我们只是介绍一个示例)。

我们将库所的类型从“T”改变为“List T”,使输入弧引起的变换依次从前排列在库所队列中,输出弧引起的变换依次从库所队列头部移出。

在示例中执行上述操作时,可以得到下图所示结果:

image stack.jpg

声明的变化

网络中库所的变化

 

弧的变化(输入和输出)

队列

我们想要网络具有先进先出的行为,就像TCP流的行为。

我们将库所的类型从“T”改变为“List T”,使输入弧引起的变换依次添加到队列中,输出弧引起的变换依次从库所队列头部移出。

区别于堆栈的唯一不同点是:输入弧引起的变换是依次添加到队列中去,而不是追加到队列的前面。在示例中执行上述操作时,可以得到下图所示结果:

image queue.jpg

声明的变化

网络库所的变化

 

输出弧的变化

输入弧的变化

优先排队

我们想要网络具有优先排队的行为,也即包的优先度决定了它被处理的次序。类似于IP中的服务品质选项,在这个选项中从八个层面的优先度来确认数据包。

我们将库所的类型从“T”改变为“List T”,根据输入弧引起变换元素优先度的不同将其分别插入到列表中去,输出弧引起的变换元素依次从列表头部移出。

区别于先进先出队列的不同点是:输入弧引起的变换元素不是依次添加到列表中去,而是根据它们优先度的不同分别加入到列表中去。在示例中执行上述操作时,可以得到下图所示结果:

Priority queue

声明的变化

网络库所的变化

输出弧的变化

输入弧的变化

示例

下述示例可以下载到: