利用方法bindCloudletsToVmsSimple()将一组任务顺序分配给一组虚拟机,当所有的虚拟机都有任务后,再从第一个虚拟机开始重头分配任务,该方法尽量保证每个虚拟机运行相同数量的任务以均衡负载。利用方法bindCloudletsToVmsTimeAwared对时间做贪心,希望使所有任务的完成时间最短。对比利用贪心策略和顺序分配策略完成所有任务所消耗的时间。JAVA IDEA完整代码

时间: 2024-03-06 09:51:29 浏览: 15
下面是一个简单的实现,包括任务和虚拟机的定义,以及使用两种不同的方法进行任务调度的示例代码: ```java import java.util.*; public class Cloudlet { private int id; private long length; private long finishTime; public Cloudlet(int id, long length) { this.id = id; this.length = length; this.finishTime = -1; } public int getId() { return id; } public long getLength() { return length; } public long getFinishTime() { return finishTime; } public void setFinishTime(long finishTime) { this.finishTime = finishTime; } } public class Vm { private int id; private long capacity; private List<Cloudlet> cloudlets; public Vm(int id, long capacity) { this.id = id; this.capacity = capacity; this.cloudlets = new ArrayList<>(); } public int getId() { return id; } public long getCapacity() { return capacity; } public List<Cloudlet> getCloudlets() { return cloudlets; } public void addCloudlet(Cloudlet cloudlet) { cloudlets.add(cloudlet); } } public class CloudletScheduler { public static void bindCloudletsToVmsSimple(List<Cloudlet> cloudlets, List<Vm> vms) { int numVms = vms.size(); int currentVm = 0; for (Cloudlet cloudlet : cloudlets) { Vm vm = vms.get(currentVm); vm.addCloudlet(cloudlet); currentVm = (currentVm + 1) % numVms; } } public static void bindCloudletsToVmsTimeAware(List<Cloudlet> cloudlets, List<Vm> vms) { PriorityQueue<Vm> queue = new PriorityQueue<>((vm1, vm2) -> { long time1 = vm1.getCloudlets().stream().mapToLong(Cloudlet::getLength).sum(); long time2 = vm2.getCloudlets().stream().mapToLong(Cloudlet::getLength).sum(); return Long.compare(time1, time2); }); queue.addAll(vms); for (Cloudlet cloudlet : cloudlets) { Vm vm = queue.poll(); vm.addCloudlet(cloudlet); queue.offer(vm); } } public static void main(String[] args) { List<Cloudlet> cloudlets = new ArrayList<>(); cloudlets.add(new Cloudlet(1, 100)); cloudlets.add(new Cloudlet(2, 200)); cloudlets.add(new Cloudlet(3, 150)); cloudlets.add(new Cloudlet(4, 80)); List<Vm> vms = new ArrayList<>(); vms.add(new Vm(1, 300)); vms.add(new Vm(2, 200)); bindCloudletsToVmsSimple(cloudlets, vms); System.out.println("Simple strategy:"); for (Vm vm : vms) { System.out.println("VM " + vm.getId() + ":"); for (Cloudlet cloudlet : vm.getCloudlets()) { System.out.println("\tCloudlet " + cloudlet.getId() + ": " + cloudlet.getLength()); } } bindCloudletsToVmsTimeAware(cloudlets, vms); System.out.println("Time-aware strategy:"); for (Vm vm : vms) { System.out.println("VM " + vm.getId() + ":"); for (Cloudlet cloudlet : vm.getCloudlets()) { System.out.println("\tCloudlet " + cloudlet.getId() + ": " + cloudlet.getLength()); } } } } ``` 在这个示例代码中,我们首先定义了Cloudlet和Vm两个类,分别表示任务和虚拟机。Cloudlet类包含任务的ID、任务长度和完成时间等属性,Vm类包含虚拟机的ID、容量和已分配的任务列表等属性。 然后,我们定义了CloudletScheduler类,其中包含两个静态方法bindCloudletsToVmsSimple和bindCloudletsToVmsTimeAware,分别对应顺序分配和时间贪心两种策略。这两个方法接受两个参数:任务列表和虚拟机列表。在bindCloudletsToVmsSimple方法中,我们使用一个循环将任务顺序分配给虚拟机,保证每个虚拟机运行相同数量的任务以均衡负载。在bindCloudletsToVmsTimeAware方法中,我们使用一个优先队列来维护虚拟机的任务完成时间,每次将任务分配给完成时间最早的虚拟机,以期望使所有任务的完成时间最短。 最后,在main方法中,我们创建了一个简单的测试用例,包含四个任务和两个虚拟机,并依次使用两种方法进行任务调度,输出每个虚拟机分配的任务列表。

相关推荐

最新推荐

recommend-type

为linux虚拟机一个网卡分配多个IP地址

为linux虚拟机一个网卡分配多个IP地址, 而且有图啊,很有用,本人自己做的
recommend-type

CentOS虚拟机克隆后无法上网(网卡信息不一致)问题的解决方法

主要为大家详细介绍了CentOS虚拟机克隆后无法上网,即网卡信息不一致问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

Xshell5连接虚拟机中的Linux的方法以及失败原因解决

很早以前就装了虚拟机,现在终于装上了Linux。虽然机子的配置还不错,虚拟机一般也不会特别卡,但是来回切换有时也是一件十分令人头疼的事情。虽然说不卡,但是CPU占用率还是很高的。...虚拟机相当于一个电脑所以当然
recommend-type

虚拟机安装linux系统无法上网的解决方法

主要为大家详细介绍了虚拟机安装linux系统无法上网的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

Ubuntu虚拟机下使用cutecom进行串口通信的方法

今天小编就为大家分享一篇关于Ubuntu虚拟机下使用cutecom进行串口通信的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
recommend-type

RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz

REALTEK 8188FTV 8188eus 8188etv linux驱动程序稳定版本, 支持AP,STA 以及AP+STA 共存模式。 稳定支持linux4.0以上内核。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

:YOLOv1目标检测算法:实时目标检测的先驱,开启计算机视觉新篇章

![:YOLOv1目标检测算法:实时目标检测的先驱,开启计算机视觉新篇章](https://img-blog.csdnimg.cn/img_convert/69b98e1a619b1bb3c59cf98f4e397cd2.png) # 1. 目标检测算法概述 目标检测算法是一种计算机视觉技术,用于识别和定位图像或视频中的对象。它在各种应用中至关重要,例如自动驾驶、视频监控和医疗诊断。 目标检测算法通常分为两类:两阶段算法和单阶段算法。两阶段算法,如 R-CNN 和 Fast R-CNN,首先生成候选区域,然后对每个区域进行分类和边界框回归。单阶段算法,如 YOLO 和 SSD,一次性执行检
recommend-type

info-center source defatult

这是一个 Cisco IOS 命令,用于配置 Info Center 默认源。Info Center 是 Cisco 设备的日志记录和报告工具,可以用于收集和查看设备的事件、警报和错误信息。该命令用于配置 Info Center 默认源,即设备的默认日志记录和报告服务器。在命令行界面中输入该命令后,可以使用其他命令来配置默认源的 IP 地址、端口号和协议等参数。
recommend-type

c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf

校园超市商品信息管理系统课程设计旨在帮助学生深入理解程序设计的基础知识,同时锻炼他们的实际操作能力。通过设计和实现一个校园超市商品信息管理系统,学生掌握了如何利用计算机科学与技术知识解决实际问题的能力。在课程设计过程中,学生需要对超市商品和销售员的关系进行有效管理,使系统功能更全面、实用,从而提高用户体验和便利性。 学生在课程设计过程中展现了积极的学习态度和纪律,没有缺勤情况,演示过程流畅且作品具有很强的使用价值。设计报告完整详细,展现了对问题的深入思考和解决能力。在答辩环节中,学生能够自信地回答问题,展示出扎实的专业知识和逻辑思维能力。教师对学生的表现予以肯定,认为学生在课程设计中表现出色,值得称赞。 整个课程设计过程包括平时成绩、报告成绩和演示与答辩成绩三个部分,其中平时表现占比20%,报告成绩占比40%,演示与答辩成绩占比40%。通过这三个部分的综合评定,最终为学生总成绩提供参考。总评分以百分制计算,全面评估学生在课程设计中的各项表现,最终为学生提供综合评价和反馈意见。 通过校园超市商品信息管理系统课程设计,学生不仅提升了对程序设计基础知识的理解与应用能力,同时也增强了团队协作和沟通能力。这一过程旨在培养学生综合运用技术解决问题的能力,为其未来的专业发展打下坚实基础。学生在进行校园超市商品信息管理系统课程设计过程中,不仅获得了理论知识的提升,同时也锻炼了实践能力和创新思维,为其未来的职业发展奠定了坚实基础。 校园超市商品信息管理系统课程设计的目的在于促进学生对程序设计基础知识的深入理解与掌握,同时培养学生解决实际问题的能力。通过对系统功能和用户需求的全面考量,学生设计了一个实用、高效的校园超市商品信息管理系统,为用户提供了更便捷、更高效的管理和使用体验。 综上所述,校园超市商品信息管理系统课程设计是一项旨在提升学生综合能力和实践技能的重要教学活动。通过此次设计,学生不仅深化了对程序设计基础知识的理解,还培养了解决实际问题的能力和团队合作精神。这一过程将为学生未来的专业发展提供坚实基础,使其在实际工作中能够胜任更多挑战。