这个例子展示了如何使用Queue块来存储和队列消息。Queue块允许指定消息存储容量、覆盖策略和消息转换期间的排序策略。
的队列Block支万博1manbetx持三种消息排序策略:
后进先出(后进先出)-存储中最新的消息最先离开。
先进先出(FIFO)——存储器中最古老的信息最先离开。
优先级-消息根据其优先级排序。优先级队列只能在如果队列已满,则覆盖最老的元素复选框被清除。
这个例子使用了一个简单的基于消息的通信模型动画和理解发送和接收信息.该模型包括消息流1和消息流2,其中消息从Sine Wave1流到Scope1,从Sine Wave2流到Scope2。
在消息流1和消息流2中:
的样品时间参数sinwave1和sinwave2设置为0.1
.它们是相同的正弦波源。
的样品时间Receive1和Receive2的参数设置为0.5
.它们是相同的接收块。
Queue1和Queue2的容量为One hundred.
.两个队列具有相同的容量。
Queue1的排序策略为后进先出
和Queue2先进先出
,显示在块标签下。两个消息流场景之间的唯一区别是队列排序策略。
记录Sine Wave1、Receive1、Receive2之间的信号。
在仿真数据检查器中模拟模型并观察结果。
观察正弦波1的输出。SineWave2的输出没有显示出来,因为它与SineWave1是相同的。还可以观察到来自Receive1的信号是正弦波的表示,但样本之间的间隔更长。但是,来自Receive2的信号是正弦波到达正峰值的第一部分,因为Queue块的排序策略被设置为先进先出
它的容量大到足以存储信息。
还可以指定队列满时的队列块消息覆盖策略:
默认情况下,如果队列已满,则覆盖最老的元素复选框被选中。该块被设置为始终接受传入消息,覆盖存储中最古老的消息。在这种情况下,块覆盖最老的消息,但是离开块的消息是由队列排序策略决定的。
在这个队列行为的示例中,根据消息在具有容量的FIFO和LIFO队列中的到达时间枚举消息8
.有号码的新留言9
的到来。在先进先出和后进先出的情况下,消息9
替换消息1,因为它是队列中最古老的元素。但是,观察队列头尾在这个过程中的变化。在FIFO队列中,消息2
因为这是最古老的一条又一条信息1
被替换。在后进先出队列中,消息9
首先离开,因为它是到达存储的最后一条消息。留言离场后,有新留言10
的到来。队列将新消息接收到其空存储库。
如果如果队列已满,则覆盖最老的元素复选框被清除时,Queue块的图标将更改,并且当队列已满时,该块不接受新消息。这是一个阻塞队列行为。
在QueueSortingPoliciesModelSequenceViewer模型中,消息流1和消息流2中的队列块的容量将更改为15
.减少容量会导致传入消息覆盖存储中的现有消息。
模拟模型并打开Sequence Viewer块。在序列查看器块中,向上滚动或单击参加第一场活动左边的图标。根据FIFO和LIFO策略观察离开块的消息。
两个Queue块的容量都是有限的。当它们的容量满时,新的传入消息将覆盖队列中最旧的现有消息。向下滚动并观察Sequence Viewer块显示了覆盖现有消息的消息。
打开QueueOverWritingPolicyModel检查阻塞队列行为。
在Receive块中,设置样品时间参数0.5
.
在Queue块中观察:
的如果队列已满,则覆盖最老的元素复选框被清除。观察方块图标的变化。
的能力参数设置为16
.
在统计数据选项卡,离开的实体数目,d和块中的实体数,n选中复选框。
模拟模型。观察诊断查看器中显示的警告。在模拟过程中,由Send块发送的消息被丢弃。
队列块将阻塞消息如果队列已满,则覆盖最老的元素复选框被清除。您可以增加Queue块的容量,以防止消息丢失。
当如果队列已满,则覆盖最老的元素复选框被清除统计数据启用选项卡。使用统计数据选项卡以启用输出端口并观察Queue块统计信息。代码生成不支持统计信息。万博1manbetx
观察标记为“分组消息数”和“分组消息数”的信号。到模拟时间为止2
,有16
存储中的消息,即队列容量。之后,Number of Messages in Block接受值15
和16
因为信息在每个0.5
模拟时间和新消息到达。
在模拟时间10
,总共21
消息离开区块。
你也可以用事件动作,当如果队列已满,则覆盖最老的元素复选框被清除。代码生成不支持事件操作。万博1manbetx有关更多信息,请参见事件和事件动作(SimEvents).
使用事件动作在特定事件中指定消息的行为。例如,条目和退出操作在消息输入之后和消息退出之前被调用。的阻塞在消息被阻止后调用Action。
有关更多信息,请参见对运行在消息可用性上的消息接收接口进行建模.
您还可以通过使用来自SimEvents®库的块来建模更复杂的通信策略,该库需要SimEvents®许可证。