【发布时间】: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,那么你会拥有
BlockX和BlockY。现在,如果它们具有相同的输入和输出类型,那么您将使用适当的Predicate将缓冲区链接到每个缓冲区,以从 work Y 中排序 work X。 -
如果您想施加超出单个块边界的并发限制,那么您可以查看this 答案以获取可用选项。
标签: c# multithreading parallel-processing task-parallel-library tpl-dataflow