编程语言中任务调度的并行算法是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
如果给定一批任务,比如有500个任务,需要在尽可能快的时间内做完。
如果串行是肯定不行的。我们可以考虑并行策略,但是开了并行,怎么能够充分利用资源比较好呢。
这个问题在多年前做数据迁移的时候,逼得没办法,当时用shell写了一个算法,可以参考这一篇。
海量数据迁移之使用shell启用多个动态并行(r2笔记81天)
但是在自动化运维平台中,我希望这个操作能够更加通用,所以在程序端实现是极好的。
我先打算用Java来实现,然后转义为Python版本,已经写了大半部分,还没有调试好,就先不放出来了,我把我的思路说一下。
假设有下面的一些任务,第一位是序号,第二位是任务需要花费的时间。
假设分为4个并行,即4组执行任务,每组执行任务该如何分配呢。
(1, 10),
(2, 30),
(3, 20),
(4, 50),
(5, 60),
(6, 30),
(7, 20),
(8, 10),
(9, 20),
(10,50),
所以放眼任务调度的方向上,我们都希望并行,但是绝大多数情况下,并行的效果其实不好,一种最重建的情况就是前半段在并行,后半段基本在等待。
假设我们按照如下的思路来完成,前四个元素是每组的一个元素,然后每组查看累计值的最小值,然后依次加入后续的元素。按照这种方法,得到的任务安排如下:
1 10 60 70
2 30 20 20 70
3 20 30 50 100
4 50 10 60
明显这种方法有缺点,因为我们无法预知后续元素的大小,所以任务分配很不均匀。
所以我们需要排序,按照最大值,最小值的方式排序。
这样一来,最大的4个元素分别位列每组的第一个元素。然后依次取得每组累计值的最小值,加入后续的元素。
分配情况如下:
1 50 20 70
2 60 20 80
3 50 20 10 80
4 30 30 10 70
明显好很多。
关于编程语言中任务调度的并行算法是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网行业资讯频道了解更多相关知识。