Gnu-Parallel

為什麼 GNU Parallel 會變慢?

  • April 18, 2017

我正在學習 GNU 並行並嘗試了以下方法:

$ for i in {1.txt,2.txt}; do time wc -l $i; done
100 1.txt

real    0m0.010s
user    0m0.000s
sys     0m0.010s
10000012 2.txt

real    0m0.069s
user    0m0.050s
sys     0m0.018s

然後我用 重新執行上述命令parallel,但它減慢了速度。為什麼?

$ for i in {1.txt,2.txt}; do time parallel --nonall wc -l $i; done
100 1.txt

real    0m0.325s
user    0m0.192s
sys     0m0.042s
10000012 2.txt

real    0m0.305s
user    0m0.220s
sys     0m0.043s

在您的情況下,您是從 for 循環中呼叫它,因此您實際上並沒有並行執行任何東西。您所做的只是在第二個範例中增加了呼叫並行的成本,但它仍然只以單一方式執行文件。

例子

這可能會幫助您了解正在發生的事情。

不平行

$ time for i in {1..2}; do sleep 2;done

real    0m4.004s
user    0m0.001s
sys 0m0.002s

與平行

$ time for i in {1..2}; do parallel "sleep 2" < /dev/null;done

real    0m4.574s
user    0m0.245s
sys 0m0.089s

替代

你可以這樣打電話parallel

$ time parallel --gnu time wc -l ::: 1.txt 2.txt 

real    0m0.007s
user    0m0.001s
sys 0m0.000s
1000 1.txt

real    0m0.003s
user    0m0.000s
sys 0m0.001s
1000 2.txt

real    0m0.207s
user    0m0.120s
sys 0m0.052s

在這裡,我們可以看到必須呼叫 `parallel 與第三次分組顯示執行整個並行命令所花費的“總”時間量有成本。

參考

引用自:https://unix.stackexchange.com/questions/109972