您好,登錄后才能下訂單哦!
編程語言中任務(wù)調(diào)度的并行算法是什么,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。
如果給定一批任務(wù),比如有500個(gè)任務(wù),需要在盡可能快的時(shí)間內(nèi)做完。
如果串行是肯定不行的。我們可以考慮并行策略,但是開了并行,怎么能夠充分利用資源比較好呢。
這個(gè)問題在多年前做數(shù)據(jù)遷移的時(shí)候,逼得沒辦法,當(dāng)時(shí)用shell寫了一個(gè)算法,可以參考這一篇。
海量數(shù)據(jù)遷移之使用shell啟用多個(gè)動態(tài)并行(r2筆記81天)
但是在自動化運(yùn)維平臺中,我希望這個(gè)操作能夠更加通用,所以在程序端實(shí)現(xiàn)是極好的。
我先打算用Java來實(shí)現(xiàn),然后轉(zhuǎn)義為Python版本,已經(jīng)寫了大半部分,還沒有調(diào)試好,就先不放出來了,我把我的思路說一下。
假設(shè)有下面的一些任務(wù),第一位是序號,第二位是任務(wù)需要花費(fèi)的時(shí)間。
假設(shè)分為4個(gè)并行,即4組執(zhí)行任務(wù),每組執(zhí)行任務(wù)該如何分配呢。
(1, 10),
(2, 30),
(3, 20),
(4, 50),
(5, 60),
(6, 30),
(7, 20),
(8, 10),
(9, 20),
(10,50),
所以放眼任務(wù)調(diào)度的方向上,我們都希望并行,但是絕大多數(shù)情況下,并行的效果其實(shí)不好,一種最重建的情況就是前半段在并行,后半段基本在等待。
假設(shè)我們按照如下的思路來完成,前四個(gè)元素是每組的一個(gè)元素,然后每組查看累計(jì)值的最小值,然后依次加入后續(xù)的元素。按照這種方法,得到的任務(wù)安排如下:
1 10 60 70
2 30 20 20 70
3 20 30 50 100
4 50 10 60
明顯這種方法有缺點(diǎn),因?yàn)槲覀儫o法預(yù)知后續(xù)元素的大小,所以任務(wù)分配很不均勻。
所以我們需要排序,按照最大值,最小值的方式排序。
這樣一來,最大的4個(gè)元素分別位列每組的第一個(gè)元素。然后依次取得每組累計(jì)值的最小值,加入后續(xù)的元素。
分配情況如下:
1 50 20 70
2 60 20 80
3 50 20 10 80
4 30 30 10 70
明顯好很多。
關(guān)于編程語言中任務(wù)調(diào)度的并行算法是什么問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。