如何为shell任务创建有界队列?

DNN*_*NNX 5 command-line shell find sort parallelism

我有 1000 个要排序的 gzip 文件。

按顺序执行此操作,该过程看起来非常简单:

find . -name *.gz -exec zcat {} | sort > {}.txt \;
Run Code Online (Sandbox Code Playgroud)

不确定上面的代码是否有效(如果我在某处做错了,请纠正我),但我希望你理解这个想法。

无论如何,我想并行化 ungzip/sort 作业,以使整个过程更快。另外,我不想看到所有 1000 个进程同时运行。拥有一些具有可配置容量的有界作业队列(如 Java 中的 BlockingQueue 或 .NET 中的 BlockingCollection)会很棒。在这种情况下,只有 10 个进程会并行运行。

是否可以在 shell 中执行此操作?

jst*_*rek 1

快速访问谷歌揭示了这种有趣的方法:http://pebblesinthesand.wordpress.com/2008/05/22/a-srcipt-for-running-processes-in-parallel-in-bash/

for ARG in  $*; do
    command $ARG &
    NPROC=$(($NPROC+1))
    if [ "$NPROC" -ge 4 ]; then
        wait
        NPROC=0
    fi
done
Run Code Online (Sandbox Code Playgroud)