任务委托调度程序

时间:2013-02-13 13:31:21

标签: c++ multithreading scheduled-tasks scheduling load-balancing

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

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

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

2 个答案:

答案 0 :(得分:1)

您的日程安排政策似乎不适合手头的工作。通常,这种忽略任务完成时间的幼稚调度仅在任务在执行时间相对相等时才相关。 我建议做一些研究。一个好的起点是Wikipedia's Scheduling article,但这当然只是冰山一角。 我还要对任务委托要求给出第二个(和第三个)思想,因为时间点任务操作允许您通过考虑任务的“历史”来细粒度队列管理。但是,如果客户端的设计使每个客户端始终发送相同的“类型”任务,那么您可以利用这些知识获得类似的结果。

答案 1 :(得分:0)

据我记得我的排队论类,最公平的(全部是)系统是一个拥有单个队列和多个服务器的系统。使用这样的系统可确保所有任务的最低预期平均执行时间和最大利用率(工作时间的百分比,我不确定该术语是否正确)。

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