前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >任务调度的并行算法

任务调度的并行算法

作者头像
jeanron100
发布2018-07-26 15:26:21
9210
发布2018-07-26 15:26:21
举报

如果给定一批任务,比如有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

明显好很多。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档