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

时间:2015-04-16 18:03:53

标签: .net pipeline

MSDN上,它表示每个任务都是同时处理的,每个后续任务都取决于前一个任务的输出。但是,如果后续任务的处理需要前一个输出以便处理某些事情,它们如何同时发生?这是否意味着任务需要先于它的任务才能在它开始之前完成它的执行? (这听起来与我非常并发或平行)

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

  1. 读取字符串
  2. 正确的案例
  3. 创建句子
  4. 写输出
  5. 在我阅读纠正案例的所有字符串之前,我如何处理创建句子?

    装配线类比对我来说也不是非常平行,因为如果装配中的一个阶段断裂,那么部分构造的产品如何移动到下一个状态以进一步组装。

2 个答案:

答案 0 :(得分:2)

单个项目按顺序处理,但整个项目序列的处理并行(大多数情况下)。一旦某个项目由给定任务处理完毕,它就会被发送到下一个任务,该任务立即开始处理。没有管道,第一个任务必须在第二个任务开始之前处理整个值序列。来自MSDN文章的这张图片应该有所帮助:

enter image description here

答案 1 :(得分:1)

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

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

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