2015-02-09 32 views
2

這聽起來可能是矛盾的,但有沒有一種方法可以以簡單的「串行」方式並行運行,甚至無需加載線程池?我使用並行作爲xargs的更安全和更強大/更實用的替代方案。單線程'gnu parallel'

我正面臨的問題是,在一個已經已並行的代碼段,我想順序處理一堆參數(作業實際上是微不足道的,我的CPU已經運行100% )。

我知道「-P 1」選項,但即使這樣,即使平行也會創建一個作業池(或其他東西),實際上它有相當多的開銷。例如:

monarch:~/tests$ time ls -1 | xargs -n 1 -d $'\n' -I{} echo {} > /dev/null 

real 0m1.084s 
user 0m0.073s 
sys  0m1.053s 
monarch:~/tests$ time ls -1 | parallel -P1 'echo {} > /dev/null' 

real 0m4.903s 
user 0m2.235s 
sys  0m3.046s 

正如您所看到的那樣,平行度在這裏幾乎爲400%。這個例子當然是微不足道的,但我真正的用例實際上並沒有那麼複雜,而我槓桿並行的字符串替換功能。

任何更好的方法來做我想做的事情?我想,以避免對環/ xargs的,因爲我不得不重寫這些字符串替換...

(我在bash使用並行,爲它的價值)

+0

也許有人可以使用串行運行的簡單工具來幫助您實現所需的「字符串替換功能」。您可以使用您所尋找的字符串替換功能來更新您的問題... – TheCodeArtist 2015-02-09 10:25:03

+2

這聽起來像是一個XY問題。你想達到什麼目的?對於並行性,我會想'爲什麼不使用支持並行的腳本' - 比如perl。 – Sobrique 2015-02-09 11:10:05

+0

對不起,最後的評論,它運送不完整。我目前的任務可能是XY,但我真的很想知道使用並行作爲替代xargs的最佳方式。 – 2015-02-10 07:21:48

回答