流水线作为并行命令

Wei*_*hou 2 bash parallelism

通常,Unix 中的管道用于连接两个命令,并使用第一个命令的输出作为第二个命令的输入。然而,我最近提出了使用管道并行运行多个命令的想法(这可能不是新的,但我没有找到太多的谷歌搜索),如下所示:

command1 | command2
Run Code Online (Sandbox Code Playgroud)

如果不从标准输入读取并且不写入标准输出,这将并行调用command1和。说明这一点的最小示例是(请在交互式 shell 中运行它)command2command2command1

ls . -R 1>&2|ls . -R
Run Code Online (Sandbox Code Playgroud)

我的问题是,使用管道以这种方式并行执行两个命令有什么缺点吗?这个想法有什么我遗漏的吗?

非常感谢您提前。

And*_*ton 7

命令管道已经并行运行。使用命令:

command1 | command2
Run Code Online (Sandbox Code Playgroud)

双方command1command2已启动。如果command2被调度并且管道是空的,它会阻塞等待读取。如果command1尝试写入管道及其已满,则command1阻塞直到有空间写入。否则,command1command2并行执行,写入和读取管道。