2017-09-25 65 views
2

我想並行運行100個網絡(非CPU密集型)作業,並且想要了解最佳方法。使用xargs啓動並行網絡任務,同時最小化上下文切換開銷

特別是有可能使用xargs運行100多個作業,有什麼缺點?

我知道有一點,有更多的上下文切換正在完成,然後實際的數據包處理。 如何理解該點的位置以及將其最小化的最佳方法是什麼?

例如,是否有更好的工具來使用其他的xargs等?

+0

就遍歷所有的文件,並要求每個功能?這只是一個循環。 –

+0

@MartijnPieters我更新了帖子,使目標更清晰。主要關心的是啓動100多個網絡作業的可行性,同時最大限度地減少上下文切換開銷。 – GNettlefold

+0

我有點覺得這可能太寬泛了,但我仍然重新打開。 –

回答

1

更好的往往是品味的問題。

使用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個作業:

Simple scheduling

GNU並行,而不是產生一個新的進程時,一個完成 - 保持CPU的活躍,從而節省了時間:

GNU Parallel scheduling

安裝

出於安全考慮,您應該在您的軟件包管理器中安裝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

+0

感謝您的回覆Ole。我對你的一個問題是,如果這對長時間運行的工作也適用?那是一個未定義的壽命(例如web服務器)。 – GNettlefold

+0

您可能需要更具體。你要並行運行100個Web服務器嗎? –

+0

我想要消耗大約100個數據流的數據。其中約80人每2秒發生一次事件,其餘20人每秒發生一次事件。數據流是連續的,但永遠不會結束。 – GNettlefold

相關問題