TPL 数据流、MaxDegreeOfParallelism 与负载平衡
TPL dataflow, MaxDegreeOfParallelism vs load balancing
通过 TPL 数据流,可以将块的 MaxDegreeOfParallelism 并行分配给 运行,另一种方法是通过限制每个目标块的 BoundedCapacity 将源连接到多个目标来 'load balance' 负载.
问题,这两种方法有什么区别,如果我可以设置 MaxDegreeOfParallelism,为什么还要费心负载平衡?
MaxDegreeOfParallelism 强制在任务调度程序级别 运行 同时执行多少个任务实例,这绝对是您想要的,因为您可以在每次调用数据流网络时轻松设置它。 'Load balancing' 在这种情况下,你所说的并不是一个真正现实的概念。
链接到多个目标需要广播块(您不需要它,因为它会发布到所有目标块)或谓词来决定流。这会变得混乱并且非常有状态,因为您必须跟踪哪个块有下一条消息。 TPL 更符合 Actor 模型,其中消息是状态,因此尝试引入这种动态链接状态并不真正符合模型。
通过 TPL 数据流,可以将块的 MaxDegreeOfParallelism 并行分配给 运行,另一种方法是通过限制每个目标块的 BoundedCapacity 将源连接到多个目标来 'load balance' 负载.
问题,这两种方法有什么区别,如果我可以设置 MaxDegreeOfParallelism,为什么还要费心负载平衡?
MaxDegreeOfParallelism 强制在任务调度程序级别 运行 同时执行多少个任务实例,这绝对是您想要的,因为您可以在每次调用数据流网络时轻松设置它。 'Load balancing' 在这种情况下,你所说的并不是一个真正现实的概念。
链接到多个目标需要广播块(您不需要它,因为它会发布到所有目标块)或谓词来决定流。这会变得混乱并且非常有状态,因为您必须跟踪哪个块有下一条消息。 TPL 更符合 Actor 模型,其中消息是状态,因此尝试引入这种动态链接状态并不真正符合模型。