【问题标题】:Is the TPL Dataflow SingleProducerConstrained referring to number of source block or the parallelism degree of them?TPL Dataflow SingleProducerConstrained 是指源块的数量还是它们的并行度?
【发布时间】:2017-08-11 00:41:00
【问题描述】:

TPL Dataflow SingleProducerConstrained 选项是指源块的数量还是源块的最小总并行度?

即如果我只有一个源块链接到具有此选项的块,那么源的MaxDegreeOfParallelism 是否必须为 1?

【问题讨论】:

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


    【解决方案1】:

    不,这意味着(来自MSDN):

    PostCompleteFaultOfferMessage 等方法永远不会被同时调用。

    因此,如果您 100% 确定该块将从 仅一个 来源获取消息,则应将此属性设置为 truefalse 是默认值) 给定的时刻。例子:

    • 块仅是一个链接源的目标
    • 你使用lock 围绕所有向块发送内容的方法
    • 您的应用是单线程的,并且您发送消息时未使用线程池或其他一些线程技术。

    现在回到你的问题:

    如果我只有一个源块链接到具有此选项的块,源的MaxDegreeOfParallelism 是否必须为 1?

    它应该是1,好像它不止于此,它可能会破坏一些将SingleProducerConstrained设置为true的检查。

    【讨论】:

    • 这似乎与这个答案相矛盾:stackoverflow.com/questions/22474082/…你确定吗?
    • @Magnus 我看不出任何矛盾。由于这是一个公认的答案,最好问问 OP,这个答案对他有帮助吗
    • @svick 在stackoverflow.com/questions/22474082/… 中的回答说 MaxDegreeOfParallelism > 1 的源块被认为是单个生产者,如果我正确理解你的回答,你说它不是并且目标块需要将 SingleProducerConstrained 设置为 false。我只是想知道您是如何得出这个结论的,因为文档似乎对此有点模糊,而其他似乎则相反。您是否在某处阅读过它,是否对其进行了测试或其他?
    • @Magnus 也许我尝试了一些示例和/或阅读了参考代码库上的代码。不幸的是,现在不能肯定地说。也许 Jsteward 可能会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 2012-03-18
    • 1970-01-01
    • 2015-09-15
    • 2015-02-06
    • 1970-01-01
    • 2013-04-19
    相关资源
    最近更新 更多