【问题标题】:How can pipeline tasks run concurrently if each task depends on the previous output?如果每个任务都依赖于先前的输出,管道任务如何同时运行?
【发布时间】:2015-04-17 02:23:44
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 请多介绍一下上下文?
  • 如果您可以链接到 MSDN 文章并指定您所指的框架或工具,将会很有帮助。否则没人知道你在说什么。
  • @Asad ok 添加了链接

标签: .net pipeline


【解决方案1】:

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

【讨论】:

  • 那么这不是关于单个产品,而是关于同时处理多个产品的并发性?我想我现在明白了,我非常专注于单个项目的任务。谢谢你:)
  • 是的。您拥有的项目和任务越多,使用管道的好处就越大。如果您只有一项要处理,则并发性为零。您可以使用 Amdahl 定律估计并发的好处:en.wikipedia.org/wiki/Amdahl%27s_law
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    相关资源
    最近更新 更多