【问题标题】:TPL Dataflow controlling max degree of parallelism between nested blocksTPL 数据流控制嵌套块之间的最大并行度
【发布时间】:2017-10-20 23:15:59
【问题描述】:

假设我有一个动作块 A,它并行执行一些工作,最大并行度为 4。

假设我有一个案例,其中动作块 A 在某些情况下执行 X 工作,而在其他情况下执行 Y。 X 是一些小工作,Y 是一些较大的工作,需要将其拆分为较小的工作块,因此我也需要将它们并行化。
因此,在工作 Y 内部,我需要将工作块的最大并行度为 4,但此时我可能有 4 个 A 块并行执行,这可能导致例如“A-X、A-X、A-Y、A-Y”并行运行。这将导致 1 + 1 + 4 + 4 个并行任务,这对于我的目的来说太多并行任务了,因为我总是将其限制为最多 4 个(或任何其他选择的数字)。

有没有办法控制包括嵌套块在内的最大并行度?

【问题讨论】:

  • 能贴出相关代码吗?目前还不清楚嵌套块到底是什么意思。一般来说,如果你有work X 和work Y,那么你会拥有BlockXBlockY。现在,如果它们具有相同的输入和输出类型,那么您将使用适当的Predicate 将缓冲区链接到每个缓冲区,以从 work Y 中排序 work X
  • 如果您想施加超出单个块边界的并发限制,那么您可以查看this 答案以获取可用选项。

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


【解决方案1】:

在 TPL Dataflow 中创建块时,您可以通过 its options 为块指定自定义调度程序。

限制并发任务数量和并发级别的简单方法是在代码中使用ConcurrentExclusiveSchedulerPair,并带有您需要的参数。

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多