【脑洞】从task scheduling贪心算法到cpu scheduling到人生日常任务安排

最近在os中学到了一些scheduling strategy,不禁兴之所至把算法当中相关的scheduling问题也复习了一遍,发现了一些共通之处。

    • 问题:n项任务,有加工时间t1,t2,...tn, 只有一台机器
    • 目标:所有task的总用时之和最短
    • 解法:按用时从小到大排
    • 问题:n项任务,有加工时间t1,t2,...tn, 有截止时间d1,d2,...dn, 同样只有一台机器
    • 目标:单项任务最大延迟达到最小(最大延迟定义为超出截止时间的长度)
    • 解法:按截止时间从前到后排
    • 问题:n项任务,有开始时间结束时间和overlaps,只有一台机器
    • 目标:完成最多的tasks
    • 解法:按结束时间从前到后加入被选集
    • 问题:n项任务,有开始时间结束时间和overlaps,有多个processors
    • 目标:使用最少数量的processors完成所有任务
    • 解法:按开始时间从前到后加入processor中,若有冲突,create a new processor

在实际的cpu scheduling中,往往主要在优化average response time,主要思路也是shortest time first或者shortest remaining time (earliest end time) first.
到了linux实际implementation中,就是一个多层级的trade off,priority queues + round robin的一个操作,同一优先级的queue里面大家先完成一些短时tasks,长时tasks再换着换着来执行。

人生不也是应该如此?先分清自己的优先级,划分几个层级,然后在这些个层级里面把task匀匀清楚,一会儿搞搞这个,一会儿搞搞那个。。。hhh
可能需要注意的是task数量控制,毕竟你自己这个cpu烧起来是很费的,而且你的multi-processing能力真的也不强。

阅读 124

推荐阅读