论坛首页 综合技术版 数据结构和算法

任务分配问题(多级反馈队列调度算法)

浏览 251 次
该帖已经被评为隐藏帖
作者 正文
最后更新时间:2008-06-18
有一张表,里面几百万条数据。现需要定期对每条记录进行处理,每条记录处理时间由各自的处理频率,和优先级决定。且每条记录处理的频率,优先级,处理的时间可能都不相同。那么就需要一个算法对这些任务进行调度,算法要优先保证优先级高的,处理频率高的先被处理,同时也要避免某些记录长期得不到处理的情况。
  我的解决方案是:
  加一个表示权值的字段boost,并对boost设置最大值。然后在后台起一个轮询线程,隔适当的时间去扫面数据库。若发现有记录在规定的时间内没有得到处理,并且超出时间也大于规定的预期时间。就对其boost+1.执行线程首先是按照优先级来处理数据,但若发现有boost达到最大值的记录,立刻对其处理。另外,若发现有优先级较高的记录的boost也达到了最大值,说明处理线程不够,这是会适当的增加线程的数量。注(处理是分布的,可能分布多台机子上)
  但感觉还是会有问题,不知大家是否还有别的好方案!
   
最后更新时间:2008-06-03
嗯,这个例子在电信行业很普遍。
不过我也帮不上什么忙
   
0 请登录后投票
最后更新时间:2008-06-04
有一本《Linxu内核设计与实现》应该能帮上忙,呵呵,开玩笑。

我做过非常类似的东西,还写了几十页的文档,不过公司在申请专利,所以也没有什么帮的上忙的,除了提一些建议:
1. 弄清楚你的任务优先级的分布。
2. 对不同任务的处理时间开销心里有数。
3. 至少应该对不同优先级任务的等待时间有一个期望或者要求。
4. 每个任务执行完了就销毁了?
5. 还是会重复地执行。
6. 是不是要求正常情况下只有优先级高的任务都执行完了才能执行优先级较低的任务(如果是,你真可以看看上面那本书,才38块钱)
7. 如果是要求高优先级的平均任务等待时间小于低优先级任务就可以接受,这样应该使用不同与上一条的方法。
8. 避免任务长期得不到处理,也就是避免长等待,可以采用临时调高优先级的方法(较适用与第4条)
9. 也可以建立临时任务优先队列,给常规任务队列和临时任务队列分配各分配一个权重就可以了。(适用与4,5两条)
10. 无论是8或者9,都需要一个后台扫描进程或者线程来检查长等待的任务。
   
0 请登录后投票
最后更新时间:2008-06-04
有一本《Linxu内核设计与实现》应该能帮上忙,呵呵,开玩笑。

我做过非常类似的东西,还写了几十页的文档,不过公司在申请专利,所以也没有什么帮的上忙的,除了提一些建议:
1. 弄清楚你的任务优先级的分布。
2. 对不同任务的处理时间开销心里有数。
3. 至少应该对不同优先级任务的等待时间有一个期望或者要求。
4. 每个任务执行完了就销毁了?
5. 还是会重复地执行。
6. 是不是要求正常情况下只有优先级高的任务都执行完了才能执行优先级较低的任务(如果是,你真可以看看上面那本书,才38块钱)
7. 如果是要求高优先级的平均任务等待时间小于低优先级任务就可以接受,这样应该使用不同与上一条的方法。
8. 避免任务长期得不到处理,也就是避免长等待,可以采用临时调高优先级的方法(较适用与第4条)
9. 也可以建立临时任务优先队列,给常规任务队列和临时任务队列分配各分配一个权重就可以了。(适用与4,5两条)
10. 无论是8或者9,都需要一个后台扫描进程或者线程来检查长等待的任务。
   
0 请登录后投票
最后更新时间:2008-06-04
有一本《Linxu内核设计与实现》应该能帮上忙,呵呵,开玩笑。

我做过非常类似的东西,还写了几十页的文档,不过公司在申请专利,所以也没有什么帮的上忙的,除了提一些建议:
1. 弄清楚你的任务优先级的分布。
2. 对不同任务的处理时间开销心里有数。
3. 至少应该对不同优先级任务的等待时间有一个期望或者要求。
4. 每个任务执行完了就销毁了?
5. 还是会重复地执行。
6. 是不是要求正常情况下只有优先级高的任务都执行完了才能执行优先级较低的任务(如果是,你真可以看看上面那本书,才38块钱)
7. 如果是要求高优先级的平均任务等待时间小于低优先级任务就可以接受,这样应该使用不同与上一条的方法。
8. 避免任务长期得不到处理,也就是避免长等待,可以采用临时调高优先级的方法(较适用与第4条)
9. 也可以建立临时任务优先队列,给常规任务队列和临时任务队列分配各分配一个权重就可以了。(适用与4,5两条)
10. 无论是8或者9,都需要一个后台扫描进程或者线程来检查长等待的任务。
   
0 请登录后投票
论坛首页 综合技术版 数据结构和算法

跳转论坛:
JavaEye推荐