0

我实现了调度程序 任务委托调度程序而不是任务窃取调度程序。所以这个方法的基本思想是每个线程都有自己的私有本地队列。每当产生任务时,在任务进入本地队列之前,会在队列之间进行搜索操作,并通过比较每个队列的大小来找到最小大小的队列。每次使用这个最小大小的队列来将任务排入队列。这是一种将工作压力从繁忙线程的队列中转移并将作业委托给最不繁忙线程的队列的方法。

这种调度技术的问题是,我们不知道每个任务需要多少时间才能完成。IE。队列可能具有最小计数,但任务可能仍在运行,另一方面队列可能具有更高值的计数器,但任务可能很快完成。有什么想法可以解决这个问题吗?

我正在使用我们自己的多线程库中的 linux、C++ 编程语言来实现多速率同步数据流范例。

4

2 回答 2

1

看来您的调度策略不适合手头的工作。通常这种忽略任务完成时间的朴素调度仅在任务的执行时间相对相等时才有意义。我建议做一些研究。一个好的起点是维基百科的调度文章,但这当然只是冰山一角。我还要考虑任务委派要求的第二个(和第三个),因为时间片任务操作允许您通过考虑任务的“历史”来细粒度的队列管理。但是,如果客户端被设计成每个客户端始终发送相同“类型”的任务,那么您可以利用这些知识获得类似的结果。

于 2013-02-13T14:45:00.453 回答
0

据我在我的队列理论课上记得,最公平的(在所有这些中)系统是具有单个队列和多个服务器的系统。使用这样的系统可以确保所有任务的最低预期平均执行时间和最大的利用率(它工作的时间百分比,我不确定这个术语是否正确)。

换句话说,除非您有一些优先任务,否则请重新考虑您的任务委派调度程序实现。

于 2013-02-13T14:32:56.773 回答