【发布时间】:2016-08-24 09:15:46
【问题描述】:
我经常读到管道模式是一种在利用并发方面常见且有用的模式。但我想知道与任务并行模式相比,并行管道模式是否有任何优势。
假设我们在管道中有三个阶段:A、B、C。当需要处理数据时,A 拿走它,处理它并将其交给 B。当下一个数据块进入时,同样会发生并且A 和 B 同时工作。
所以管道中的不同阶段可以并行执行,但是当我们使用 三个 并行工作的管道时(如在任务并行模式中),我们会得到完全相同的画面。当两个数据块一个接一个地进来时,第一个块由管道 1 获取,下一个块由管道 2 获取,两个块同时处理。
此外,我可以很容易地想象并行管道中的很多问题:阶段之间的缓冲区可能会阻塞(或溢出),一个阶段在处理速度方面占主导地位,因此最慢阶段之前的所有阶段都必须等待等等。 .
任务并行模式中不存在这些问题。此外,当块的进入速度超过管道的第一阶段处理它们的速度(或者它们可以同时获取)时,这种模式更加灵活。
那么我为什么要使用并行管道模式呢?
提前感谢您的任何想法!
【问题讨论】:
-
你不能总是将传入的数据分成独立的块,例如当一个元素的处理取决于前一个元素的结果时。单线程的 CPU 指令就是这种情况,也是 CPU 内核具有具有并行阶段的流水线的原因。
标签: multithreading design-patterns concurrency parallel-processing program-structure