您好,登錄后才能下訂單哦!
編程語言中任務調度的并行算法是什么,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
如果給定一批任務,比如有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
明顯好很多。
關于編程語言中任務調度的并行算法是什么問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。