如果每个任务都依赖于先前的输出,如何同时管道任务 运行?

How can pipeline tasks run concurrently if each task depends on the previous output?

MSDN 它说每个任务都是并发处理的,每个后续任务都取决于前一个任务的输出。但是,如果后续任务的处理需要前一个任务的输出才能处理某些内容,它们怎么可能同时发生呢?这是否意味着任务需要在它之前的任务完成它的执行才能开始? (这听起来对我来说不是很同时或平行)

例如,在他们的图表中,他们显示了使用这些步骤处理字符串

  1. 读取字符串
  2. 大小写正确
  3. 造句
  4. 写入输出

在阅读所有大小写更正的字符串之前,我如何创建句子?

装配线类比听起来也不太适合我,因为如果装配中的一个阶段发生故障,那么部分构建的产品如何移动到下一个状态以进行进一步装配。

"...即使值是按顺序处理的。您可以将软件管道视为类似于工厂中的装配线,其中装配线中的每个项目都是分阶段构建的。部分组装的项目是从一个装配阶段传递到另一个装配阶段。装配线的输出与输入的顺序相同。"

Here 是关于您的主题的更多信息。

简而言之,任务被分解,因此如果任务 (n+1) 得到任务 (n) 的输出,任务 (n+1) 可以在任务 (n) 阻塞时开始处理该数据起床或真的很忙。

单个项目 是按顺序处理的,但是整个项目序列的处理是并行发生的(大部分)。一旦某个项目完成了给定任务的处理,它就会被发送到下一个任务,该任务会立即开始处理它。如果没有管道,第一个任务必须在第二个任务开始之前处理整个值序列。 MSDN 文章中的这张图片应该有所帮助: