【发布时间】:2016-09-14 22:55:50
【问题描述】:
我有一个具有以下属性的系统:
有些工人在工作。可以添加或删除工人。每个工作人员可以同时运行多个作业。
有工作。这些作业永远运行(无限期)并分配给工人。可以添加或删除作业。
我正在使用循环法在启动时将工作分配给工人,这工作得很好。
但是,我想在添加和删除工作人员以及添加和删除工作时重新平衡分配给工作人员的工作。
虽然可以在发生上述任何更改时使用循环算法重新分配所有内容,但所做的更改将超出要求。
换句话说,是否有任何循环再平衡算法可以使分配的差异/更改最少?
【问题讨论】:
-
一名工人如何同时同时从事多项工作?您的描述中还有一个隐含的假设,即一个工人可以中断他的工作,而另一个工人可以恢复这个被中断的工作。这是一个已解决的问题,还是您希望您的问题的答案能够解决此问题?
-
一个工作人员可以同时处理多个工作,因为每个工作都是作为 goroutine 启动的。换句话说,每个作业都可以被认为是一个线程(尽管 go 例程不是线程)。这项工作相对简单:将消息从数据库推送到消息总线,因此将工作切换到另一个工作人员是微不足道的。
-
一个工作可以同时分配给多个worker吗?
-
@SauravSahu No. 每个工作只能分配给 1 个工人。
标签: algorithm round-robin