在C#TPL Dataflow库中,SingleProducerConstrained是ActionBlocks的优化选项,当只有一个线程正在为动作块提供时,您可以使用它:
如果一个块只被一个生产者用于 时间,意味着一次只有一个线程会使用像 这个属性可能是块上的Post,OfferMessage和Complete 设置为true以通知块它不需要额外应用 同步。
如果使用具有MaxDegreeOfPArallelism>的单个TransformBlock来馈送ActionBlock,该怎么办? 1 - 会违反在ActionBlock上将SingleProcerContrained设置为true的规则吗?或者是具有MaxDegreeOfPArallelism的单个TransformBlock> 1仍被视为“单一生产者”?
答案 0 :(得分:7)
是的,我认为它被认为是单一制作人。
这是因为所有构建的int块都保持排序,因此只有在接受了第1项后,才能向目标块提供第2项(使用the OfferMessage()
method)。而这种约束意味着一次只能有一个线程向目标提供消息,这遵循“单一生产者”的定义。