[英]Xargs parallelism in Bash
所以我想了解BASH中的此功能-它使用並行性:
function get_cache_files() {
## The maximum number of parallel processes. 16 since the cache
## naming scheme is hex based.
local max_parallel=${3-16}
## Get the cache files running grep in parallel for each top level
## cache dir.
find $2 -maxdepth 1 -type d | xargs -P $max_parallel -n 1 grep -Rl "KEY:.*$1" | sort -u
} # get_cache_files
所以我的問題是:
php2-mindaugasb.c9.io/5c/c6/348e9a5b0e11fb6cd5948155c02cc65c
為什么當命名方案基於HEX時使用16個進程很重要(十六進制)? 一次運行max-procs進程; 默認值為1。如果max-procs為0,則xargs一次將運行盡可能多的進程。 將-n選項與-P一起使用; 否則,只有一名高管會被執行。
好的,這樣:“ xargs -P $ max_parallel -n 1”是正確的,將啟動16個進程嗎? 還是n也應該等於$ max_parallel?
據我了解,並行化的條件是:
您可以並行化處理的其他條件是什么?
好的,這樣:“ xargs -P $ max_parallel -n 1”是正確的,將啟動16個進程嗎? 還是n也應該等於$ max_parallel?
想一想商店中的幾個櫃台,還有大量等待付款的顧客。 類似地, -P
將是紙幣計數器的數量(此處為16)。 -n
是一個櫃台一次可以處理的客戶數量(此處為1)。 在這種情況下,很容易在每個計數器上描繪出大約相等大小的隊列,對嗎?
從問題的角度來看, max_parallel=${3-16}
表示如果未將$ 3參數傳遞給函數,則變量將設置為16。 xargs
啟動grep
16個( -P
參數)並行進程。 每個進程都從xargs的stdin中獲得恰好一行( -n
參數)作為最后一個命令行參數。 在這種情況下,xargs的標准輸入是find命令的輸出。 總體而言,find命令將列出所有目錄,其輸出將被16個grep進程逐行使用。 每個grep進程將被調用為:
grep -R1 "KEY:.*$1" <one line from find-output/xargs-input>
注釋:“因為緩存命名方案是基於十六進制的,所以有16個”-命名示例是這樣的:php2-mindaugasb.c9.io/5c/c6/348e9a5b0e11fb6cd5948155c02cc65c-為什么當命名方案基於HEX時使用16個進程很重要(十六進制)?
我無法弄清背后的邏輯; 但我認為這更多的是要做數據的分配和數量。 如果發現來自輸出線的總數是16的倍數,那么它可能有一定的道理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.