NumberOfWorkers 和 MaxParallelism 选项的目的或关系是什么?

ger*_*jvr 4 rebus

前几天我遇到了一个问题,我将工作人员规模扩大SetNumberOfWorkers到一个可笑的数字,希望看到吞吐量的同等跳跃。我每次只能看到 5 名工人在做任何工作。发现神奇的上限是最大并行度选项,默认值为 5。

我的假设是 1 个工作线程等于 1 个线程。

NumberOfWorkers和选项的目的或关系是什么MaxParallelism

moo*_*000 5

虽然我意识到这可能不太清楚,但实际上非常简单。

您说的“工作人员数量”是这个特定总线实例中工作线程的数量,这是绝对正确的。

但由于 Rebus 中的一切都是async现在的,如果可以编辑该工作,那么一个工人可以并行执行大量的工作await

因此,为了避免做太多工作,引入了“最大并行度”概念,它对并行处理的消息数量设置了全局最大上限。

使用哪些值取决于您要执行的工作类型。以下是一些合理的设置:

  • 工作主要是异步的 - 您可以使用一些工作线程和相当高的并行性,例如.SetNumberOfWorkers(2).SetMaxParallelism(20)
  • 工作是快速和同步的 - 您可以使用一些工作线程和匹配的并行性,例如.SetNumberOfWorkers(5).SetMaxParallelism(5)(尽管将并行性设置得更高在这种情况下不会影响任何事情)
  • 工作缓慢且同步 - 您可以使用更多工作线程和匹配的并行度,例如.SetNumberOfWorkers(15).SetMaxParallelism(15)(再次强调:在这种情况下将并行度设置得更高不会影响任何内容)

正如您所正确观察到的,由于并行度设置对可以并行处理的消息数量设置了绝对上限,因此将并行度设置为低于线程数是没有意义的。

编辑:我已将此页面添加到维基 - 感谢您让我意识到这个概念没有在任何地方得到解释:)