在利用并发方面,我经常将管道模式作为一种常见且有用的模式来阅读。但是我想知道并行管道模式与任务并行模式相比是否有任何优势。
假设我们在管道中有三个阶段:A、B、C。当需要处理数据时,A 拿走它,处理它并将其交给 B。当下一个数据块进入时,同样会发生 A 和 B正在同时工作。
所以管道中的不同阶段可以并行执行,但是当我们使用三个并行工作的管道时(如在任务并行模式中),我们得到完全相同的画面。当两个数据块相继进入时,第一个块由管道 1 获取,下一个块由管道 2 获取,并且两个块同时处理。
此外,我可以很容易地想象并行管道中的很多问题:阶段之间的缓冲区可能会阻塞(或溢出),一个阶段在处理速度方面占主导地位,因此最慢阶段之前的所有阶段都必须等待等等......
任务并行模式中不存在这些问题。此外,当块的进入速度超过管道的第一阶段处理它们的速度(或者它们可以同时获取)时,这种模式更加灵活。
那么我为什么要使用并行管道模式呢?
提前感谢您的任何想法!