[请益] 排程相关的算法(优先伫列)

楼主: ntpuisbest (阿龙)   2022-10-21 20:24:19
目前工作大概一年多
想问一下各位关于排程相关的算法
https://i.imgur.com/DBthnys.png
我在书上观看这个高性能定时器的章节
他提到每一秒扫描整张大表的坏处有二
1.任务的约定执行时间可能跟当前时间距离很久,所以扫描是徒劳的
2.如果列表很大,这会很徒劳
关于这两点我都可以理解 每秒扫描会有这两个坏处
也理解优先伫列可以避免这些问题
但我的问题是,这真的要动用到优先伫列吗?
我对电脑底层不熟悉
没有办法直接去设定说
假设每个任务只要做十分钟就一定可以做完好了
八点做A任务
九点做B任务
十点做C任务
我看很多框架都有支援这种方式
我朋友是跟我说那些框架可能底层也是靠priority queue来做的
我是不太理解,如果都可以每隔某段时间做某件事
电脑应该也可以指定时间做事吧?
为何一定要依靠每秒轮询polling 或是 priority queue来做
这是我查到的排程相关算法的资料,每秒轮询应该就是下面的
Round Robin (RR)
https://data-flair.training/blogs/scheduling-algorithms-in-operating-system/
希望各位版友可以解惑
谢谢
作者: itoni (每天都过得很混)   2022-10-21 20:39:00
不管怎么样你总该有地方放所有预定的工作吧 那要用什么资料结构存 比一下就是PQ最适合啊
作者: aa06697 (todo se andarà)   2022-10-21 20:41:00
PQ已经是蛮底层的资料结构了吧 再更底层你是想用硬件去做?
作者: itoni (每天都过得很混)   2022-10-21 20:55:00
用LL或array存 那新增task的时间就会要O(n)
作者: lwoody84857 (ㄡㄡㄡ)   2022-10-21 21:03:00
电脑没法指定时间,会有润秒问题搞懂wall clock和monolithic clock,你大概就能解惑其他高级一点的做法像是timing wheel,但底层也是polling+pq的实现
作者: gasbomb (虚空雷神兽)   2022-10-21 21:07:00
电脑的世界没有魔法 你看到的便利功能都是人家刻出来的想到之前有人问说删资料夹一定要跑recursive吗?windows都可以一键删除整个资料夹耶可是windows的删除功能也是下去跑recursive啊
作者: MyNion (Nion Lee)   2022-10-21 21:09:00
你可以用LinkedList配合二元树去做,这样取排程就是O(1)取完排程再插回去就是O(log n)
作者: GTR12534 (カラス)   2022-10-21 21:20:00
你讲的东西相比之下不够底层
作者: longlongint (华哥尔)   2022-10-21 21:30:00
你的假设套PQ不适合你如果把派任务给你的人想成你主管 会比较好像比较好想像 (前面打错字一直抽插任务 一下很急一下又取消然后一直改顺序+要你多工顾多个任务然后跟你说哪个任务重要也不知道 你想办法让客户爽这时候OS就要猜优先度+用PQ(linux是CFS 红黑树)看要排什么事情做,然后又不能单一任务做太久
作者: Apache (阿帕契)   2022-10-21 21:38:00
问就是去看底层电脑里面没有小精灵要动时间不是polling就是timer interrupt这东西跟排程无关 有机会去看单片机实现排程的方式
作者: lovdkkkk (dk)   2022-10-21 21:47:00
用 map 日期时间字串当 key value 放该时间要跑的东西就不用扫全部了?
作者: xam (听说)   2022-10-21 21:51:00
用map不是更瞎忙.....
作者: lovdkkkk (dk)   2022-10-21 21:53:00
好像是耶 push 然后 loop 省事
作者: OriginStar   2022-10-21 22:17:00
原PO把许多问题混在一起了。用举例解释,就PO开会等老板但拉肚子想跑厕所,一直看手表(scan)也没用。书中少少提到预估时间这件事,而电脑中多数Task的执行时间是很难预估的,受到很多因素影响,所以电脑要在特定时间执行特定功能也无法保证
作者: enthos (影斯作业系统)   2022-10-21 22:28:00
玩 Javascript RTS: Screeps 就会有实际的感受
作者: wulouise (在线上!=在电脑前)   2022-10-21 23:17:00
一定十分钟是怎么保证的?很多东西都是没办法预测的,要是可以预测大家早就做了
作者: Zerocks (Zerocks)   2022-10-21 23:45:00
设定cronjob 其实就是以最小时间单位下去检查是不是该trigger有queue 在检查的时候只要看queue 就好电脑只有指令周期的概念 没有时间的概念 时间是前人做出来的方便东西
作者: GoalBased (Artificail Intelligence)   2022-10-22 12:28:00
你说的可以,但怎么实现的?

Links booklink

Contact Us: admin [ a t ] ucptt.com