Java 将Cloudlet动态添加到已在运行的同一个VM(在CloudSim.startSimulation()之后)
在 但我想做的是这样的事情Java 将Cloudlet动态添加到已在运行的同一个VM(在CloudSim.startSimulation()之后),java,simulation,cloudsim,Java,Simulation,Cloudsim,在 但我想做的是这样的事情 Runnable monitor = new Runnable() { @Override public void run() { CloudSim.pauseSimulation(200); while (true) { if (CloudSim.isPaused()) { break; } try {
Runnable monitor = new Runnable() {
@Override
public void run() {
CloudSim.pauseSimulation(200);
while (true) {
if (CloudSim.isPaused()) {
break;
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Log.printLine("\n\n\n" + CloudSim.clock() + ": The simulation is paused for 5 sec \n\n");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
/*
The vmList, broker and brokerID are already defined in Main Thread and are available.
*/
cloudletList = createCloudlet(brokerId, 10, 100); // creating 10 cloudlets
broker.submitVmList(vmlist);
broker.submitCloudletList(cloudletList);
CloudSim.resumeSimulation();
}
};
这是因为我的要求是
- 在单独的线程中动态创建cloudlet(主线程用于
)Cloudsim.startSimulation()
- 将这些新的Cloudlet添加到正在运行的现有VM中
broker.submitCloudletList(cloudletList,delayinsectonds)
延迟Cloudlets和VM的提交。
如果希望在模拟开始后动态创建Cloudlet,可以使用许多CloudSim Plus侦听器中的一个来完成。
您可以添加一个方法来创建新的Cloudlet,例如:
private void createDynamicCloudlet(EventInfo evt) {
if((int)evt.getTime() == 100){
List<Cloudlet> newCloudletList = new ArrayList<>();
System.out.printf("\n# Dynamically creating 2 Cloudlets at time %.2f\n", evt.getTime());
Cloudlet cloudlet1 = new CloudletSimple(1000, 2);
newCloudletList(cloudlet1);
Cloudlet cloudlet2 = new CloudletSimple(1000, 2);
newCloudletList(cloudlet2);
broker0.submitCloudletList(newCloudletList);
}
}
private void createDynamicCloudlet(EventInfo evt){
如果((int)evt.getTime()==100){
List newCloudletList=newarraylist();
System.out.printf(“\n#在时间%.2f\n”,evt.getTime())动态创建2个Cloudlet);
Cloudlet cloudlet1=新CloudletSimple(1000,2);
newCloudletList(cloudlet1);
Cloudlet cloudlet2=新CloudletSimple(1000,2);
newCloudletList(cloudlet2);
broker0.submitCloudletList(newCloudletList);
}
}
然后在开始模拟之前调用simulation.addonclockticklister(this::createDynamicCloudletAndVm)
。这将使createDynamicCloudlet
方法在每次模拟时钟增加时都被调用。如果时钟达到100秒,将创建一个新的Cloudlet并提交给一个已经存在的代理
您不需要更改框架类、添加新的代理实例,也不需要为此类任务使用线程。您可以检查整个示例
如果该示例有帮助,请进行投票。使用,您可以通过调用broker.submitCloudletList(cloudletList,delayInSeconds)
延迟Cloudlet和VM的提交。
如果希望在模拟开始后动态创建Cloudlet,可以使用许多CloudSim Plus侦听器中的一个来完成。
您可以添加一个方法来创建新的Cloudlet,例如:
private void createDynamicCloudlet(EventInfo evt) {
if((int)evt.getTime() == 100){
List<Cloudlet> newCloudletList = new ArrayList<>();
System.out.printf("\n# Dynamically creating 2 Cloudlets at time %.2f\n", evt.getTime());
Cloudlet cloudlet1 = new CloudletSimple(1000, 2);
newCloudletList(cloudlet1);
Cloudlet cloudlet2 = new CloudletSimple(1000, 2);
newCloudletList(cloudlet2);
broker0.submitCloudletList(newCloudletList);
}
}
private void createDynamicCloudlet(EventInfo evt){
如果((int)evt.getTime()==100){
List newCloudletList=newarraylist();
System.out.printf(“\n#在时间%.2f\n”,evt.getTime())动态创建2个Cloudlet);
Cloudlet cloudlet1=新CloudletSimple(1000,2);
newCloudletList(cloudlet1);
Cloudlet cloudlet2=新CloudletSimple(1000,2);
newCloudletList(cloudlet2);
broker0.submitCloudletList(newCloudletList);
}
}
然后在开始模拟之前调用simulation.addonclockticklister(this::createDynamicCloudletAndVm)
。这将使createDynamicCloudlet
方法在每次模拟时钟增加时都被调用。如果时钟达到100秒,将创建一个新的Cloudlet并提交给一个已经存在的代理
您不需要更改框架类、添加新的代理实例,也不需要为此类任务使用线程。您可以检查整个示例
如果示例有帮助,请向上投票。您有什么问题?你的问题是什么?您期望的行为是什么?您收到的是什么?我的问题是我无法在运行时将Cloudlet添加到运行的VM中。这给了我错误。我的问题是,Cloudlet能否在运行时添加到同一个VM中,如果是,如何添加?您的问题是什么?你的问题是什么?您期望的行为是什么?您收到的是什么?我的问题是我无法在运行时将Cloudlet添加到运行的VM中。这给了我错误。我的问题是,Cloudlet是否可以在运行时添加到同一个VM中,如果可以,如何添加?
private void createDynamicCloudlet(EventInfo evt) {
if((int)evt.getTime() == 100){
List<Cloudlet> newCloudletList = new ArrayList<>();
System.out.printf("\n# Dynamically creating 2 Cloudlets at time %.2f\n", evt.getTime());
Cloudlet cloudlet1 = new CloudletSimple(1000, 2);
newCloudletList(cloudlet1);
Cloudlet cloudlet2 = new CloudletSimple(1000, 2);
newCloudletList(cloudlet2);
broker0.submitCloudletList(newCloudletList);
}
}