|
我从这个答案中读到了和之间的区别;
https://unix.stackexchange.com/a/159492/318084;
考虑两个命令 A 和 B。当你写
一个 | B
A和B并行执行,A的标准输出作为B的标准输入发送。
我对这个词感到困惑parallel
我可以理解描述管道 (Unix) - 维基百科
在类 Unix 计算机操作系统中,管道是通过标准流链接在一起的一系列进程,以便每个进程的输出 (stdout) 直接作为输入 (stdin) 传送到下一个进程。
管道将输出传递给下一个作为输入。
尽管如此,答案是“并行”,它们是同时执行而不是按顺序执行。
这个机制如何运作?
我想|
应该生成一个子 shell,它从父 shell 中的 A 获取变量(导出变量),然后在作业完成时自动关闭子 shell。
答案1
管道是流处理的一个例子。一旦构建了管道,一旦数据到达所有进程,处理就会同时参与许多进程。想象一下 - 有三个数据 -a b c
和两个进程 -A
和B
。现在看看这些步骤:
a@A B
-a
进入,里面还A
没有任何东西B
b@A a@B
-a
被传递B
并b
进入A
c@A b@B
-到达时c
到达A
b
B
A c@B
-仅此A
而已c
B
想象一下,a
非常大。如此之大,机器上一次只能存在两个元素。顺序处理要求首先处理它们,然后同时存储它们。并行处理不仅意味着较低的存储需求,而且还需要多个处理器——尽管这不是必需的,因为可以通过时间分配在单个处理器上模拟并行性。b
c
A
B
管道的每个步骤都是在子 shell 中运行的单独进程。通常,特定进程中的输出会有缓冲,这意味着输出会以更大的块形式发送出去。这可以优化操作,但可能会被关闭,然后输出一旦准备好就会消失。但即使有更大的块,它仍然是并行的。