簡體   English   中英

Bash中的Xargs並行性

[英]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

所以我的問題是:

  1. 注釋:“ 16,因為緩存命名方案是基於十六進制的”-命名示例是這樣: php2-mindaugasb.c9.io/5c/c6/348e9a5b0e11fb6cd5948155c02cc65c為什么當命名方案基於HEX時使用16個進程很重要(十六進制)?
  2. XARGS的-P選項適用於max-procs:

一次運行max-procs進程; 默認值為1。如果max-procs為0,則xargs一次將運行盡可能多的進程。 將-n選項與-P一起使用; 否則,只有一名高管會被執行。

好的,這樣:“ xargs -P $ max_parallel -n 1”是正確的,將啟動16個進程嗎? 還是n也應該等於$ max_parallel?

  1. 據我了解,並行化的條件是:

    1. 將在其上執行操作的資源的獨立性(例如將在其上執行操作的類似文件);
    2. 操作在獨立的計算機上執行;

    您可以並行化處理的其他條件是什么?

好的,這樣:“ xargs -P $ max_parallel -n 1”是正確的,將啟動16個進程嗎? 還是n也應該等於$ max_parallel?

想一想商店中的幾個櫃台,還有大量等待付款的顧客。 類似地, -P將是紙幣計數器的數量(此處為16)。 -n是一個櫃台一次可以處理的客戶數量(此處為1)。 在這種情況下,很容易在每個計數器上描繪出大約相等大小的隊列,對嗎?

從問題的角度來看, max_parallel=${3-16}表示如果未將$ 3參數傳遞給函數,則變量將設置為16。 xargs啟動grep 16個( -P參數)並行進程。 每個進程都從xargsstdin中獲得恰好一行( -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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM