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);
    }
}