NS2仿真:公交车移动周期模型及性能分析
NS2仿真实验报告3
实验名称:公交车移动周期模型及性能分析
实验日期:2015年3月16日~2015年3月21日
实验报告日期:2015年3月22日
一、实验环境(网络平台,操作系统,网络拓扑图)
运行平台:虚拟机VMwareWorkstation11.0
操作系统:Linux/CentOS6.5仿真分析工具:NS2.35中的仿真软件ns,图形界面工具nam,编译工具awk,图表编辑器xgraph
网络拓扑图:
二、 实验目的
建立简单回路城市公交模型,假定给回路中的每个公交车都配置一个数据收发装置,进行网络通信。在NS仿真平台上建立相应的运动模型,以及配置路由机制,和分析网络性能的方法,综合分析该网络模型的可行性。本实验的主要在于分析网络的性能,网络的运动模型将以时间段表述出来。
三、 实验内容及步骤(包括主要配置流程,重要部分截图)
在实验1和2的基础上,通过动态静态网络传输的周期性模型,进一步学习无线自组织网络,其中包括一些常见的无线网络传输协议DSDV(Destination Sequenced Distance Vector)目标序列距离路由矢量算法、AODV(Adhocon DemandDistance Vector Routing)Adhoc网络的距离矢量路由算法、DSR(Dynamic Source Routing)等。比较在该模型下,使用不同路由协议时,各网络传输连通的状况。根据图表总结归纳各网络协议的优缺点以及性能分析。
3.1编写一个tcl脚本一般分为以下几个步骤
1) 创建模拟器对象
用来定义和控制模拟过程。在这个过程中,首先创建一个simulator 对象。
# 创建新模拟器
set ns [new Simulator]
2) 设置跟踪文件
# 跟踪文件和NAM文件创建
set tracefd [open trace2.trw]
$ns trace-all $tracefd
set namtrace [open sim12.nam w]
$ns namtrace-all-wireless$namtrace $val(x) $val(y)
# 吞吐量跟踪文件建立(用于最后分析)
set f0 [open out01.tr w]
# 丢包率跟踪文件建立(用于最后分析)
set f5 [open lost02.tr w]
# 传输延时跟踪文件建立(用于最后分析)
set f10 [open delay02.tr w]
3) 创建网络拓扑结构
set topo [new Topography]
# 场景范围设置
$topo load_flatgrid $val(x) $val(y)
#定义属性值(无线网络环境的固定模式)
set val(chan) Channel/WirelessChannel ;#信道类型
set val(prop) Propagation/TwoRayGround ;#无线传输类型
set val(netif) Phy/WirelessPhy ;#网络接口类型
set val(mac) Mac/802_11 ;# MAC类型
set val(ifq) Queue/DropTail/PriQueue ;#接口队列类型
set val(ll) LL ;#链路层类型
set val(ant) Antenna/OmniAntenna ;#天线模式
set val(ifqlen) 50 ;#包的最大缓存数
set val(nn) 18 ;#移动节点个数
set val(rp) AODV ;# 路由协议(实验3的关键因素,与AODV替换)
set val(x) 1000 ;# 定义场景中X轴最大值
set val(y) 400 ;# 定义场景中Y轴最大值
Mac/802_11 set RTSThreshold_ 3000
Mac/802_11 set basicRate_ 1Mb
Mac/802_11 set dataRate_ 2Mb
4) 配置节点属性
# 对本次实验中将出现的无线节点的属性进行详细设置
$ns node-config-adhocRouting $val(rp) \
-llType $val(ll) \
-macType $val(mac) \
-ifqType $val(ifq) \
-ifqLen $val(ifqlen) \
-antType $val(ant) \
-propType $val(prop) \
-phyType $val(netif) \
-channelType $val(chan) \
-topoInstance $topo \
-agentTrace ON \
-routerTrace ON \
-macTrace OFF \
-movementTrace ON
for {set i 0} {$i <$val(nn) } {incr i} {
set node_($i)[$ns node]
$node_($i)random-motion 0 ;# disable randommotion无法随机游动
}
5) 创建拓扑结构
# 初始化节点位置
$node_(0) set X_ 100.0
$node_(0) set Y_ 250.0
$node_(0) set Z_ 0.0
$node_(1) set X_ 800.0
$node_(1) set Y_ 200.0
$node_(1) set Z_ 0.0
$node_(2) set X_ 100.0
$node_(2) set Y_ 200.0
$node_(2) set Z_ 0.0
$node_(3) set X_ 100.0
$node_(3) set Y_ 200.0
$node_(3) set Z_ 0.0
$node_(4) set X_ 100.0
$node_(4) set Y_ 200.0
$node_(4) set Z_ 0.0
$node_(5) set X_ 100.0
$node_(5) set Y_ 200.0
$node_(5) set Z_ 0.0
$node_(6) set X_ 100.0
$node_(6) set Y_ 200.0
$node_(6) set Z_ 0.0
$node_(7) set X_ 100.0
$node_(7) set Y_ 200.0
$node_(7) set Z_ 0.0
$node_(8) set X_ 100.0
$node_(8) set Y_ 200.0
$node_(8) set Z_ 0.0
$node_(9) set X_ 100.0
$node_(9) set Y_ 200.0
$node_(9) set Z_ 0.0
$node_(10) set X_ 800.0
$node_(10) set Y_ 250.0
$node_(10) set Z_ 0.0
$node_(11) set X_ 800.0
$node_(11) set Y_ 250.0
$node_(11) set Z_ 0.0
$node_(12) set X_ 800.0
$node_(12) set Y_ 250.0
$node_(12) set Z_ 0.0
$node_(13) set X_ 800.0
$node_(13) set Y_ 250.0
$node_(13) set Z_ 0.0
$node_(14) set X_ 800.0
$node_(14) set Y_ 250.0
$node_(14) set Z_ 0.0
$node_(15) set X_ 800.0
$node_(15) set Y_ 250.0
$node_(15) set Z_ 0.0
$node_(16) set X_ 800.0
$node_(16) set Y_ 250.0
$node_(16) set Z_ 0.0
$node_(17) set X_ 800.0
$node_(17) set Y_ 250.0
$node_(17) set Z_ 0.0
# 定义节点大小用于在nam中查看
for {set i 0} {$i < $val(nn)} {incr i} {
$ns initial_node_pos$node_($i) 20
}
#节点的运动路径
$ns at 10.0 "$node_(0) setdest 50.0 350.0 30.0"
$ns at 20.0 "$node_(0) setdest 350.0 350.0 30.0"
$ns at 30.0 "$node_(0) setdest 350.0 50.0 30.0"
$ns at 40.0 "$node_(0) setdest 50.0 50.0 30.0"
$ns at 10.0 "$node_(1) setdest 350.0 50.0 60.0"
$ns at 15.0 "$node_(1) setdest 50.0 50.0 60.0"
$ns at 20.0 "$node_(1) setdest 50.0 350.0 60.0"
$ns at 25.0 "$node_(1) setdest 350.0 350.0 60.0"
$ns at 30.0 "$node_(1) setdest 350.0 50.0 60.0"
$ns at 35.0 "$node_(1) setdest 50.0 50.0 60.0"
$ns at 40.0 "$node_(1) setdest 50.0 350.0 60.0"
$ns at 45.0 "$node_(1) setdest 350.0 350.0 60.0"
for {set i 0} {$i < $val(nn)} {incr i} {
$ns initial_node_pos$node_($i) 20
}
$ns at 0.0 "$app1 start"
$ns at 0.0 "$node_(2) setdest 800.0 200.0 50.0"
$ns at 14.0 "$node_(2) setdest 800.0 250.0 50.0"
$ns at 15.0 "$node_(2) setdest 100.0 250.0 50.0"
$ns at 29.0 "$node_(2) setdest 100.0 200.0 50.0"
$ns at 2.0 "$node_(3) setdest 800.0 200.0 50.0"
$ns at 16.0 "$node_(3) setdest 800.0 250.0 50.0"
$ns at 17.0 "$node_(3) setdest 100.0 250.0 50.0"
$ns at 31.0 "$node_(3) setdest 100.0 200.0 50.0"
$ns at 4.0 "$node_(4) setdest 800.0 200.0 50.0"
$ns at 18.0 "$node_(4) setdest 800.0 250.0 50.0"
$ns at 19.0 "$node_(4) setdest 100.0 250.0 50.0"
$ns at 33.0 "$node_(4) setdest 100.0 200.0 50.0"
$ns at 6.0 "$node_(5) setdest 800.0 200.0 50.0"
$ns at 20.0 "$node_(5) setdest 800.0 250.0 50.0"
$ns at 21.0 "$node_(5) setdest 100.0 250.0 50.0"
$ns at 35.0 "$node_(5) setdest 100.0 200.0 50.0"
$ns at 8.0 "$node_(6) setdest 800.0 200.0 50.0"
$ns at 22.0 "$node_(6) setdest 800.0 250.0 50.0"
$ns at 23.0 "$node_(6) setdest 100.0 250.0 50.0"
$ns at 37.0 "$node_(6) setdest 100.0 200.0 50.0"
$ns at 10.0 "$node_(7) setdest 800.0 200.0 50.0"
$ns at 24.0 "$node_(7) setdest 800.0 250.0 50.0"
$ns at 25.0 "$node_(7) setdest 100.0 250.0 50.0"
$ns at 39.0 "$node_(7) setdest 100.0 200.0 50.0"
$ns at 12.0 "$node_(8) setdest 800.0 200.0 50.0"
$ns at 26.0 "$node_(8) setdest 800.0 250.0 50.0"
$ns at 27.0 "$node_(8) setdest 100.0 250.0 50.0"
$ns at 41.0 "$node_(8) setdest 100.0 200.0 50.0"
$ns at 14.0 "$node_(9) setdest 800.0 200.0 50.0"
$ns at 28.0 "$node_(9) setdest 800.0 250.0 50.0"
$ns at 29.0 "$node_(9) setdest 100.0 250.0 50.0"
$ns at 43.0 "$node_(9) setdest 100.0 200.0 50.0"
$ns at 0.0 "$node_(10) setdest 100.0 250.0 50.0"
$ns at 14.0 "$node_(10) setdest 100.0 200.0 50.0"
$ns at 15.0 "$node_(10) setdest 800.0 200.0 50.0"
$ns at 29.0 "$node_(10) setdest 800.0 250.0 50.0"
$ns at 2.0 "$node_(11) setdest 100.0 250.0 50.0"
$ns at 16.0 "$node_(11) setdest 100.0 200.0 50.0"
$ns at 17.0 "$node_(11) setdest 800.0 200.0 50.0"
$ns at 31.0 "$node_(11) setdest 800.0 250.0 50.0"
$ns at 4.0 "$node_(12) setdest 100.0 250.0 50.0"
$ns at 18.0 "$node_(12) setdest 100.0 200.0 50.0"
$ns at 19.0 "$node_(12) setdest 800.0 200.0 50.0"
$ns at 33.0 "$node_(12) setdest 800.0 250.0 50.0"
$ns at 6.0 "$node_(13) setdest 100.0 250.0 50.0"
$ns at 20.0 "$node_(13) setdest 100.0 200.0 50.0"
$ns at 21.0 "$node_(13) setdest 800.0 200.0 50.0"
$ns at 35.0 "$node_(13) setdest 800.0 250.0 50.0"
$ns at 8.0 "$node_(14) setdest 100.0 250.0 50.0"
$ns at 22.0 "$node_(14) setdest 100.0 200.0 50.0"
$ns at 23.0 "$node_(14) setdest 800.0 200.0 50.0"
$ns at 37.0 "$node_(14) setdest 800.0 250.0 50.0"
$ns at 10.0 "$node_(15) setdest 100.0 250.0 50.0"
$ns at 24.0 "$node_(15) setdest 100.0 200.0 50.0"
$ns at 25.0 "$node_(15) setdest 800.0 200.0 50.0"
$ns at 39.0 "$node_(15) setdest 800.0 250.0 50.0"
$ns at 12.0 "$node_(16) setdest 100.0 250.0 50.0"
$ns at 26.0 "$node_(16) setdest 100.0 200.0 50.0"
$ns at 27.0 "$node_(16) setdest 800.0 200.0 50.0"
$ns at 41.0 "$node_(16) setdest 800.0 250.0 50.0"
$ns at 14.0 "$node_(17) setdest 100.0 250.0 50.0"
$ns at 28.0 "$node_(17) setdest 100.0 200.0 50.0"
$ns at 29.0 "$node_(17) setdest 800.0 200.0 50.0"
$ns at 43.0 "$node_(17) setdest 800.0 250.0 50.0"
6) 设置代理和应用层协议并进行绑定
set agent1 [new Agent/UDP] ;# 创建UDP代理
$agent1 set prio_ 0
# 创建Loss Monitor Sink检验丢失分组
set sink [new Agent/LossMonitor]
$ns attach-agent $node_(0)$agent1 ; #发射代理与节点连接(以下几个意义相同)
$ns attach-agent $node_(1)$sink ; # 接收代理与节点连接(以下几个意义相同)
$ns connect $agent1$sink
# 两节点相连(以下几个意义相同)
set app1 [new Application/Traffic/CBR]; # 创建流量发射器(以下几个意义相同)
$app1 set packetSize_ 512 ;# 定义包大小(以下几个意义相同)
$app1 set rate_ 600Kb ;# 定义发射频率(以下几个意义相同)
$app1 attach-agent $agent1; # 连接流量发射器和代理(以下几个意义相同)
set agent2 [new Agent/UDP]
$agent2 set prio_ 1
set sink2 [new Agent/LossMonitor]
$ns attach-agent $node_(3)$agent2
$ns attach-agent $node_(4)$sink2
$ns connect $agent2$sink2
set agent34 [new Agent/UDP]
$agent34 set prio_ 1
set sink34 [new Agent/LossMonitor]
$ns attach-agent $node_(5)$agent34
$ns attach-agent $node_(6)$sink34
$ns connect $agent34$sink34
set agent3 [new Agent/UDP]
$agent3 set fid_ 3
$agent3 set prio_ 2
set sink3 [new Agent/LossMonitor]
$ns attach-agent $node_(7)$agent3
$ns attach-agent $node_(8)$sink3
$ns connect $agent3$sink3
set agent4 [new Agent/UDP]
$agent4 set prio_ 3
set agent45 [new Agent/UDP]
$agent45 set prio_ 1
set sink45 [new Agent/LossMonitor]
$ns attach-agent $node_(9)$agent45
$ns attach-agent $node_(10)$sink45
$ns connect $agent45$sink45
set sink4 [new Agent/LossMonitor]
$ns attach-agent $node_(11) $agent4
$ns attach-agent $node_(12)$sink4
$ns connect $agent4$sink4
set agent78 [new Agent/UDP]
$agent78 set prio_ 1
set sink78 [new Agent/LossMonitor]
$ns attach-agent $node_(13)$agent78
$ns attach-agent $node_(14)$sink78
$ns connect $agent78$sink78
set agent5 [new Agent/UDP]
$agent5 set prio_ 4
set sink5 [new Agent/LossMonitor]
$ns attach-agent $node_(15)$agent5
$ns attach-agent $node_(16)$sink5
$ns connect $agent5 $sink5
7) 使用模拟器对象的at过程设置节点事件和时间的对应关系
# 定时发包开始及结束
$ns at 0.0 "record"
$ns at 1.0 "$app1start"
$ns at 50.0 "$app1 stop"
$ns at 50.0 "stop"
# 在50秒的时候重置节点
for {set i 0} {$i < $val(nn) } {incr i} {
$ns at 50.0 "$node_($i)reset";
}
8) 记录实验数据
# 创建record函数来记录数据
proc record {}{
global sink sink2 sink3 sink4 sink5 f0 f5holdtime holdseq holdtime1 holdseq1 holdtime2 holdseq2 holdtime3 holdtime4holdseq3 holdseq4 f10 holdrate1 holdrate2 holdrate3 holdrate4 holdrate5
set ns [Simulator instance]
set time 0.9 ;# 设置采样时间
set bw0 [$sink set bytes_]
set bw5 [$sink set nlost_]
set bw10 [$sink set lastPktTime_]
set bw11 [$sink set npkts_]
set now [$ns now]
# 计算吞吐量并写入out02.tr、out12.tr、out22.tr、out32.tr文件
puts $f0"$now [expr (($bw0+$holdrate1)*8)/(2*$time*1000000)]"
# 计算丢包率并写入lost02.tr、lost12.tr、lost22.tr、lost32.tr
puts $f5"$now [expr $bw5/$time]"
# 计算延时并写入delay02.tr、delay12.tr、delay22.tr、delay32.tr
if { $bw11 >$holdseq } {
puts $f10 "$now [expr ($bw10 -$holdtime)/($bw11 - $holdseq)]"
} else {
puts $f10 "$now [expr ($bw11 -$holdseq)]"
}
9) 使用模拟器对象的run过程开始模拟
proc stop {} {
global ns tracefd f0 f5 f10
#关闭trace文件,停止记录
close $f0
close $f5
close $f10
# 用 xgraph 把吞吐量,丢包率,和延时显示在图像上
exec xgraph out02.tr out12.trout22.tr -geometry 800x400 &
exec xgraph lost02.tr lost12.trlost22.tr lost32.tr -geometry 800x400 &
exec xgraph delay02.tr delay12.trdelay22.tr delay32.tr -geometry 800x400 &
exec nam sim12.nam
# 重置Trace文件
$ns flush-trace
close $tracefd
exit 0
}
puts"Starting Simulation..."
$ns run
10) 结果分析
模拟结束后,将得到保存模拟过程的traced文件,接下来的主要工作就是对于这个结果文件根据需求进行数据分析,同时可以用xgraph等画图工具直观的显示数据分析结果。
四、 实验结果(包括最终实验结果,重要部分截图)
4.1移动模型节点切换分析
仿真开始时间为0.0s,此时执行代码$ns at0.0 "$app1 start",节点0和1之间通过中间的16个基站,寻找最佳的传输路径。节点0作为发射器,节点1作为接收器。公交车以一定的班车时间在环形公路上周期性行驶。
在第5.4s时,此时节点0和1通过节点2传输数据。由节点0开始发出广播依次传递给附近的移动节点,由移动节点依次向前洪泛式传播消息。最终将携带消息传递到目标节点1中去。
第5.5s时,由节点1返回一个确认消息,节点0开始向节点1发送数据,直到路由信息发生变化为止。此时的链路为:0->4->2->10->11->1。
第5.8s时,由于节点的运动,出现远离最初连接的基站节点,距离远到数据无法继续传输时,节点0发送的信息几乎全部丢失,于是所有节点重新开始匹配新的路由信息。
第9.0s时,节点经过再次的匹配,连接到新的基站节点10和节点2上,数据传输开通。此时的链路为:0->10->2>1。
第9.6s时节点10远离节点2,出现严重的数据丢失后,切换到节点7节点通路为:0->5->11->12->13->1。 AODV协议的按需基于距离矢量的特性,使得节点之间始终保持在最佳连通状况。
第11.2s时,由于公交车的移动,路由发生变化AODV协议为节点选择最佳的通信链路,此时的链路为:1->6>->4->2->1。
第12.8s时,链路发生变化为:0->10->6->14->2->1。
第14.2s时,链路发生变化为:0->7->5->4->1。
第15.2s时,链路发生变化为:0->9->7->15->1。
第19.1s时,链路发生变化为:0->10->8->2->1。
第20.3s时,链路发生变化为:0->14->9->3->1。
第20.4s时,链路发生变化为:0->14->9->7->1。
第20.9s时,链路发生变化为:0->14->16->3->1。
第26.3s时,信息的传递出现小范围的环路,链路为:0->14->16->3,并未传递到目标节点1中去。此时节点16和14正向接收节点1移动,节点3向节点0移动,在26.3s-28.4s之间正常通信,但在28.4s时节点3距离节点1的距离超过了可通信的范围,出现连路中断,而路由协议则认为,依据距离矢量方法依然可以同行,所以出现了严重的数据丢失。
第28.4s时,链路发生变化为:0->15->13->11->1。
第29.6s时,链路发生变化为:0->2->4->6->12->1。
第32.7s时,链路发生变化为:0->2->5->6->8->13->1。
第35.4s时,链路发生变化为:0->14->9->7->1。此后移动节点2-9和移动节点10-17沿着公交路线环绕一周,陆续回到原来的起点处。不可避免的出现链路的中断。
4.2吞吐量、丢包率以及延时的分析
1.计算 TCP吞吐量的公式
TCP窗口大小(bits) / 延迟(秒) = 每秒吞吐量(bits)
2.计算最优 TCP窗口大小的公式
带宽(bits每秒) * 往返延迟(秒) = TCP窗口大小(bits) / 8 = TCP窗口大小(字节)
3.给定吞吐量计算最大延迟的公式
TCP窗口大小(bits) / 吞吐量(bits每秒) = 最大往返延迟时间
如下图所示,仿真开始时间是5.0s。数据传输处于请求转发时期,在5.8s时数据开始丢失,一直持续到仿真时间第9.0s,数据链路才处于接通状态。第20.0s时发生小范围的回路现象,导致数据严重丢失,持续到26.0s时恢复通信。
如下图所示,节点0和节点1之间数据传输,节点1的丢包在15s左右出现严重的缺失,这是因为15s时,节点0和1由于通信距离不在两者在范围之内,重新进行切换到新的基站节点中去。
节点0和1在仿真开始时处于未接通状态,所以首先要经过各节点进行协商,设置出转接通信的节点,此时由上述的实验步骤可以看出,在第5.4s时开始建立通信,节点0发出建立连接的消息,到节点1中去,数据通信的时延较长,随后数据连通后,数据通信延时减少。
五、试验中的问题及心得
5.1一些出现最多的问题
问题1
num_nodes is set18
warning: Pleaseuse -channel as shown in tcl/ex/wireless-mitf.tcl
INITIALIZE THELIST xListHead
StartingSimulation...
channel.cc:sendUp- Calc highestAntennaZ_ and distCST_
highestAntennaZ_= 1.5, distCST_ = 550.0
SORTING LISTS...DONE!
Segmentationfault (core dumped)
应考虑加上如下的代码:
set val(rp)DSR ;# 路由协议(实验2的关键因素,与AODV替换)
NS2文件中不存在协议DSR,这是因为有些协议是需要自己配置的。
问题2
ns: puts"NS EXITING..." _o3 halt:wrong # args: should be "puts ?-nonewline? ?channelId? string"
while executing
"puts"NS EXITING..." _o3 halt"
考虑结束控制命令$ns at 60.0 "puts \"NSEXITING...\" $ns halt",中是否缺少分号”;”,即$ns at 60.0 "puts \"NSEXITING...\" ; $ns halt"。
还要考虑数据传输开始和结束的控制命令,也有可能引起这样的错误。
六、实验思考
本次实验主要是通过学习移动节点在实际中是如何,通过不同的协议,比如在本实验中采用的是AODV路由协议,这时,通信节点之间自动的按照协议所规定的方法在仿真场景中进行连接。在上述实验中不宜使用DSDV协议,因为DSDV路由协议所有的节点都必须被告知路由信息,节点将长时间处于寻找路由的过程中,而不是进行通信。因此DSDV协议适用于节点稀疏时,易于实现的模型当中。
而AODV路由协议不同于表驱动路由协议,是一种特殊的按需距离矢量的反应式路由协议,每个节点中记录自己可达的节点,一旦出现某个节点不可达,则自动删除该记录,修复链路的连通性。大多数时间保持在一种可通信的状态。这种协议适用于节点密度比较大的情况,节和节点之间几乎是可实时通信的情况。
NS2仿真:公交车移动周期模型及性能分析的更多相关文章
- 『高性能模型』Roofline Model与深度学习模型的性能分析
转载自知乎:Roofline Model与深度学习模型的性能分析 在真实世界中,任何模型(例如 VGG / MobileNet 等)都必须依赖于具体的计算平台(例如CPU / GPU / ASIC 等 ...
- Roofline Model与深度学习模型的性能分析
原文链接: https://zhuanlan.zhihu.com/p/34204282 最近在不同的计算平台上验证几种经典深度学习模型的训练和预测性能时,经常遇到模型的实际测试性能表现和自己计算出的复 ...
- NS2仿真:两个移动节点网络连接及协议性能分析
NS2仿真实验报告2 实验名称:两个移动节点网络连接及协议性能分析 实验日期:2015年3月9日~2015年3月14日 实验报告日期:2015年3月15日 一.实验环境(网络平台,操作系统,网络拓扑图 ...
- NS2仿真:使用NS仿真软件模拟简单网络模型
NS2仿真实验报告1 实验名称:使用NS仿真软件模拟简单网络模型 实验日期:2015年3月2日~2015年3月7日 实验报告日期:2015年3月8日 一.实验环境(网络平台,操作系统,网络拓扑图) 运 ...
- JVM内存模型和性能优化 转
JVM内存模型和性能优化 JVM内存模型优点 内置基于内存的并发模型: 多线程机制 同步锁Synchronization 大量线程安全型库包支持 基于内存的并发机制,粒度灵活控制,灵活度高于 ...
- 网络拥塞控制与NS2仿真
准备工作: 1. 安装virtual box 虚拟机,并安装虚拟机增强功能,并配制共享文件夹. 共享文件夹自动挂载后的路径为/media/sf_xxx文件夹,xxx为所起的文件名. 解决virtual ...
- 形形色色的软件生命周期模型(4)——MSF、实用型
摘要: 读大学时,我们曾经学习过不少软件生命周期模型,当时还不是很懂软件开发,你可能会觉得这些东西很新奇.在实际工作中,你会发现这些模型其实很难应用,与此同时你会接触到RUP.MSF等权威软件公司的生 ...
- 目标检测模型的性能评估--MAP(Mean Average Precision)
目标检测模型中性能评估的几个重要参数有精确度,精确度和召回率.本文中我们将讨论一个常用的度量指标:均值平均精度,即MAP. 在二元分类中,精确度和召回率是一个简单直观的统计量,但是在目标检测中有所不同 ...
- Windows五种IO模型性能分析和Linux五种IO模型性能分析
Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blo ...
随机推荐
- IntelliJ IDEA提示忽略大小写
1.打开设置(CTRL+ALT+S) 2.搜索Code Completion,点击Case sensitive completion后面的选择框,选中None
- 高级I/O函数(3)-tee、fcntl函数
tee函数使用 功能描述:tee函数在两个管道文件描述符之间复制数据,也是零拷贝操作.它不消耗数据,因此源文件描述符仍然可以用于后续的操作. 函数原型: #include <fcntl.h> ...
- 【USACO 2.3.2】奶牛家谱
[题目描述] 农民约翰准备购买一群新奶牛.在这个新的奶牛群中,每一个母亲奶牛都生两小奶牛.这些奶牛间的关系可以用二叉树来表示.这些二叉树总共有N个节点(3 <= N < 200).这些二叉 ...
- Python标准库--os模块
这个模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Windows下运行.一个例 ...
- 第三方分页控件aspnetPager出现问题解决方法
问题描述: 今天在打开以前的项目使用vs2013打开后并且生成解决方案的时候发现报错了.经过检查发现是由于第三方分页控件aspnetPager在页面上不能引用到了. 解决方法: 1. 首先将AspNe ...
- thinkphp的nginx配置
thinkphp的nginx配置 server { listen 80; server_name www.abc.com; #charset utf-8; access_log /var/www/ww ...
- codeforces 232D Fence
John Doe has a crooked fence, consisting of n rectangular planks, lined up from the left to the righ ...
- RESTful API -备
网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备......). 因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信.这导致AP ...
- segv & mini coredump
1. mini coredump a. segv http://zh.scribd.com/doc/3726406/Crash-N-Burn-Writing-Linux-applica ...
- LINUX BASH SHELL,小小学习一下
注意点要注意的: 整数运算一般通过 let 和 expr 这两个指令来实现,如对变量 x 加 1 可以写作:let "x = $x + 1" 或者 x=`expr $x + 1` ...