我想並行運行100個網絡(非CPU密集型)作業,並且想要了解最佳方法。使用xargs啓動並行網絡任務,同時最小化上下文切換開銷
特別是有可能使用xargs運行100多個作業,有什麼缺點?
我知道有一點,有更多的上下文切換正在完成,然後實際的數據包處理。 如何理解該點的位置以及將其最小化的最佳方法是什麼?
例如,是否有更好的工具來使用其他的xargs等?
我想並行運行100個網絡(非CPU密集型)作業,並且想要了解最佳方法。使用xargs啓動並行網絡任務,同時最小化上下文切換開銷
特別是有可能使用xargs運行100多個作業,有什麼缺點?
我知道有一點,有更多的上下文切換正在完成,然後實際的數據包處理。 如何理解該點的位置以及將其最小化的最佳方法是什麼?
例如,是否有更好的工具來使用其他的xargs等?
更好的往往是品味的問題。
使用GNU並行,你可以做這樣的事情來獲取並行100張圖片:如果你想從100臺服務器上的數據
seq 1000 | parallel -j100 wget https://foo.bar/image{}.jpg
,每次你得到一個完整的一行:
parallel -a servers.txt -j0 --line-buffer my_connect {}
或者:
parallel -a servers.txt -j0 --line-buffer --tag my_connect {}
GNU Parallel是一個通用的並行器,可以很容易地並行運行作業o在同一臺機器上或在您擁有ssh訪問權限的多臺機器上。
如果你想在4個CPU上運行32個不同的工作崗位,並行化直接的方式是在每個CPU上運行8個作業:
GNU並行,而不是產生一個新的進程時,一個完成 - 保持CPU的活躍,從而節省了時間:
安裝
出於安全考慮,您應該在您的軟件包管理器中安裝GNU Parallel,但是如果您的發行版沒有打包GNU Parallel,則可以進行個人安裝,而不需要root權限。它可以在10秒內通過這樣來完成:
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
對於其他安裝選項見http://git.savannah.gnu.org/cgit/parallel.git/tree/README
瞭解更多
查看更多的例子:http://www.gnu.org/software/parallel/man.html
觀看介紹視頻: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
走過t他教程:http://www.gnu.org/software/parallel/parallel_tutorial.html
訂閱郵件列表,以獲得支持:https://lists.gnu.org/mailman/listinfo/parallel
感謝您的回覆Ole。我對你的一個問題是,如果這對長時間運行的工作也適用?那是一個未定義的壽命(例如web服務器)。 – GNettlefold
您可能需要更具體。你要並行運行100個Web服務器嗎? –
我想要消耗大約100個數據流的數據。其中約80人每2秒發生一次事件,其餘20人每秒發生一次事件。數據流是連續的,但永遠不會結束。 – GNettlefold
就遍歷所有的文件,並要求每個功能?這只是一個循環。 –
@MartijnPieters我更新了帖子,使目標更清晰。主要關心的是啓動100多個網絡作業的可行性,同時最大限度地減少上下文切換開銷。 – GNettlefold
我有點覺得這可能太寬泛了,但我仍然重新打開。 –