[請益] 排程相關的演算法(優先佇列)

作者: 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