Gnu-Parallel
為什麼 GNU Parallel 會變慢?
我正在學習 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 與第三次分組顯示執行整個並行命令所花費的“總”時間量有成本。
參考