前几天我遇到了一个问题,我将工作人员规模扩大SetNumberOfWorkers到一个可笑的数字,希望看到吞吐量的同等跳跃。我每次只能看到 5 名工人在做任何工作。发现神奇的上限是最大并行度选项,默认值为 5。
我的假设是 1 个工作线程等于 1 个线程。
NumberOfWorkers和选项的目的或关系是什么MaxParallelism?
虽然我意识到这可能不太清楚,但实际上非常简单。
您说的“工作人员数量”是这个特定总线实例中工作线程的数量,这是绝对正确的。
但由于 Rebus 中的一切都是async现在的,如果可以编辑该工作,那么一个工人可以并行执行大量的工作await。
因此,为了避免做太多工作,引入了“最大并行度”概念,它对并行处理的消息数量设置了全局最大上限。
使用哪些值取决于您要执行的工作类型。以下是一些合理的设置:
.SetNumberOfWorkers(2).SetMaxParallelism(20).SetNumberOfWorkers(5).SetMaxParallelism(5)(尽管将并行性设置得更高在这种情况下不会影响任何事情).SetNumberOfWorkers(15).SetMaxParallelism(15)(再次强调:在这种情况下将并行度设置得更高不会影响任何内容)正如您所正确观察到的,由于并行度设置对可以并行处理的消息数量设置了绝对上限,因此将并行度设置为低于线程数是没有意义的。
编辑:我已将此页面添加到维基 - 感谢您让我意识到这个概念没有在任何地方得到解释:)
| 归档时间: |
|
| 查看次数: |
1074 次 |
| 最近记录: |