CloudSim基本结构-2

消息队列

  • Cloudsim消息队列futureQueue,用于保存所有的Entity之间传递的消息;
  • SimEntity事件队列evbuf,用于保存Entity需要执行事件;

Cloudsim

  • 执行startSimulation(),开始模拟器工作;
  • 执行runStart()函数,表示开始模拟操作,把初始工作做好:其中是遍历Entity,执行Entity:startEntity()操作,每个实体执行自己的sendNow()产生消息给对应需要执行的其他实体;
  • sendNow()最终会调用Cloudsim里面的send操作将这些消息放倒futureQueue中,等待调用;

  • 死循环:跳出条件futureQueue队列为空
  • 执行runClockTick(),返回True时,消息队列为空,跳出死循环,其中:
  • 先扫描所有的Entity执行每个实体的消息队列;
  • 取出futureQueue队列中的第一个消息,执行processEvent,把消息分发给对应的实体;
  • 判断futureQueue队列是否为空;
  • 不空:循环遍历futureQueue队列,分发执行processEvent所有当前时刻,即event时间和系统clock相同时间的消息,分发给对应的实体(添加至自己的事件队列);此时队列即使处理完了,也是返回False;
  • 继续循环,执行runClockTick(),遍历Entity,由其清空/执行完自己的事件队列(这些事件是cloudSim执行processEvent中调度得到的),事件执行过程可能产生新的消息,进一步由cloudSim进行调度分配到对应的实体事件队列;
  • 此时由于Entity事件发生时产生新的消息,故futureQueue队列仍不为空;
  • Cloudsim继续遍历消息队列,把这些消息分发给对应的实体事件队列,死循环继续不跳出;
  • 继续循环,执行runClockTick(),遍历Entity,由其清空/执行完自己的事件队列,如果此时没有新的消息产生,那么CloudSim中消息队列为空;
  • 此时继续遍历futureQueue队列,发现队列为空,那么返回True,跳出死循环;

  • Cloudsim:finishSimulation(),遍历实体的所有事件队列;
  • Cloudsim:runStop();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值