SingleProducerConstrained和MaxDegreeOfParallelism

时间:2014-03-18 08:38:22

标签: c# multithreading task-parallel-library tpl-dataflow

在C#TPL Dataflow库中,SingleProducerConstrained是ActionBlocks的优化选项,当只有一个线程正在为动作块提供时,您可以使用它:

  

如果一个块只被一个生产者用于   时间,意味着一次只有一个线程会使用像   这个属性可能是块上的Post,OfferMessage和Complete   设置为true以通知块它不需要额外应用   同步。

如果使用具有MaxDegreeOfPArallelism>的单个TransformBlock来馈送ActionBlock,该怎么办? 1 - 会违反在ActionBlock上将SingleProcerContrained设置为true的规则吗?或者是具有MaxDegreeOfPArallelism的单个TransformBlock> 1仍被视为“单一生产者”?

1 个答案:

答案 0 :(得分:7)

是的,我认为它被认为是单一制作人。

这是因为所有构建的int块都保持排序,因此只有在接受了第1项后,才能向目标块提供第2项(使用the OfferMessage() method)。而这种约束意味着一次只能有一个线程向目标提供消息,这遵循“单一生产者”的定义。