Go:并发和优先级排序

时间:2015-06-01 22:28:58

标签: concurrency go priority-queue

我在外部服务器上运行n~ = 1000个作业,每个作业都绑定到程序中的一个例程。我在不同的时间开始工作,他们大致按照他们开始的顺序完成,但这不能保证。

从每个go-routine我调查相应的服务器工作:它完成了吗?我的出站请求是速率限制的,所以我需要巧妙地进行轮询。

我想优先考虑早先开始工作的常规例程的民意调查。我现在这样做的方式,我有一个代表我的速率限制的通道,所有的例程等待从这个通道获取一个值,轮询他们的服务器,然后再回一个值。

但是,并不能保证这些例程甚至可以随机读取(更不用说按优先级顺序),因为在同一个通道上读取多个go-routines的行为是不确定的。

有人可以指导我如何思考这个问题吗?它不必具体,但我不确定在Go中使用什么原语和数据结构按优先级顺序读取通道,同时考虑到速率限制。

这似乎很难,因为个别的goroutines不知道整个程序的状态 - 他们的同事例程是先启动的,等等。他们应该只是在他们是否应该在任何给定的时间轮询他们的服务器。 / p>

谢谢。

1 个答案:

答案 0 :(得分:1)

您听说过加权公平队列吗?这是一种非常发达的方式来安排,以便预测哪个工作理论上应该首先完成,哪个工作是服务的。