所以我在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?
据我所知,并行化的条件是:
有什么其他条件,可以并行的情况?
答案 0 :(得分:4)
好的,所以:“xargs -P $ max_parallel -n 1”是正确的,将启动16个进程?或者n也应该等于$ max_parallel?
想想商店里的几个账单柜台以及等待支付账单的大量客户。类似的-P
将是账单计数器的数量(此处为16)。 -n
将是一个计数器一次能够处理的客户数量(此处为1)。在这种情况下,它很容易在每个计数器上显示大小相等的队列,对吧?
从问题的角度来看,max_parallel=${3-16}
表示如果$ 3参数未传递给函数,则变量设置为16。 xargs
启动-P
的16个{grep
参数)并行流程。每个进程从xargs 的 stdin中获取完全一行(-n
参数)作为最后一个命令行参数。在这种情况下,xargs的stdin是find命令的输出。总的来说,find命令将列出所有目录,它的输出将被16个grep进程逐行消耗。每个grep进程将被调用为:
grep -R1 "KEY:.*$1" <one line from find-output/xargs-input>
评论:“16因为缓存命名方案是基于十六进制的” - 命名示例如下:php2-mindaugasb.c9.io/5c/c6/348e9a5b0e11fb6cd5948155c02cc65c - 为什么在命名方案时使用16个进程很重要基于HEX(十六进制)?
我无法弄清楚这背后的逻辑;但我认为它更多的是分配和数据量。如果find的输出行总数是16的倍数,那么它可能会使某些有意义。