【问题标题】:Difference between a greedy and a non-greedy dataflow block with boundedcapacity defined定义有界容量的贪心数据流块和非贪心数据流块之间的区别
【发布时间】:2014-10-16 01:06:41
【问题描述】:

我有一个BatchBlock,上面定义了BoundedCapacity

var _batchBlock = new BatchBlock<int>(2, new GroupingDataflowBlockOptions
                                      {BoundedCapacity = 100 });

因此,如果队列容量达到 100,则块会推迟接收到的每条消息,直到有可用位置。 在这种情况下,批处理队列被认为是贪婪的还是非贪婪的?

【问题讨论】:

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


    【解决方案1】:

    块是贪婪的,但不是因为它如何处理100以上的项目,而是2以下的项目。你可以将贪婪值设置为falsetrue是默认值)然后块只会当有足够的发送批次时实际消耗项目,直到那时它们被推迟:

    var batchBlock = new BatchBlock<int>(2, new GroupingDataflowBlockOptions
    {
        Greedy = false,
        BoundedCapacity = 100.
    });
    

    BatchBlock 类以贪婪或非贪婪模式运行。在默认的贪婪模式下,BatchBlock 对象接受它提供的每条消息,并在收到指定数量的元素后传播出一个数组。在非贪婪模式下,BatchBlock 对象会推迟所有传入的消息,直到有足够的源向块提供消息以形成批处理

    来自Dataflow (Task Parallel Library)

    【讨论】:

      猜你喜欢
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-16
      • 2016-10-09
      • 1970-01-01
      • 1970-01-01
      • 2014-10-12
      相关资源
      最近更新 更多