ns2仿真模型

 
ns2仿真是基于离散事件的。在具体的实现上,它首先要求使用者构造一个事件队列,然后再依次执行这个队列中的事件。下面的代码很清楚地显示了这一点:
set ns [new Simulator]
$ns at 0.5 "puts 0.5"
$ns at 1.0 "puts 1.0"
$ns at 0.75 "puts 0.75"
$ns at 2.0 "puts 2.0; exit"
$ns run
运行后的结果为:
0.5
0.75
1.0
2.0
在这段代码中,首先创建了一个仿真器,其后的几行在不同的时间点创建了不同的事件,注意其中的1.0和0.75两个事件是反序创建的,但是在输出时是正序发生的,也就是说,仿真器在内部对时间进行了排序。
根据事件队列存储数据结构的不同,NS2有4种不同的模型:
链表(List) 在系统内部使用一个单链表将所有的事件按时间顺序连接起来,这样在插入和删除一个事件时可能需要遍历整个链表,但是在运行时的速度却相当快。
堆(Heap) 这种方式使用堆来存储事件列表(时间顺序),这种方式的好处是插入与删除事件速度较快,尤其是在事件数量非常大的时候,相比链表方式优势更为明显,因为它的复杂度仅为O(log(n)),且运行时速度相当快。
日历表(Calendar) 这种方式以时间点为主键使用哈希表来存储事件,速度最快,这也是默认使用的方法。
实时调度器(RealTime) 这种方式尝试将仿真时的时间与真实时间进行同步,也就是说如果在事件列表中最后一个事件的时刻是在第5秒发生,那么仿真时间也必定需要5秒。而其它方式则不需要。
在前3种方法中,它们在仿真器运行之后使用的时间是相同的,区别仅在于插入和删除的时间,而实时调度则是一种比较特殊的模型,使用较少。
通过如下命令可以改变仿真器的模型:
$ns use-scheduler List 
此处的List可取上面列出的4个值。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌云阁主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值