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

軟工

17100

目前工作大概一年多

想問一下各位關於排程相關的算法

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/

希望各位版友可以解惑

謝謝

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.160.137.197 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1666355061.A.EE8.html
itoni1樓不管怎麼樣你總該有地方放所有預定的工作吧 那要用什麼資料 10/21 20:39
itoni2樓結構存 比一下就是PQ最適合啊 10/21 20:39
aa066973樓PQ已經是蠻底層的資料結構了吧 再更底層你是想用硬體去做 10/21 20:41
aa066974樓 10/21 20:41
我的問題是用list或是陣列去存時間也可以吧 但是書上說的好像 要每秒去go through 整個array 看有沒有發生 現在時間等於array[i]的時間 但是沒有其他更簡單的做法嗎?除了pq外
itoni5樓用LL或array存 那新增task的時間就會要O(n) 10/21 20:55
lwoody848576樓電腦沒法指定時間,會有潤秒問題 10/21 21:03
lwoody848577樓搞懂wall clock和monolithic clock,你大概就能解惑 10/21 21:03
lwoody848578樓其他高級一點的做法像是timing wheel,但底層也是p 10/21 21:03
lwoody848579樓olling+pq的實現 10/21 21:03
gasbomb10樓電腦的世界沒有魔法 你看到的便利功能都是人家刻出來的 10/21 21:07
gasbomb11樓想到之前有人問說刪資料夾一定要跑recursive嗎? 10/21 21:07
gasbomb12樓windows都可以一鍵刪除整個資料夾耶 10/21 21:08
gasbomb13樓可是windows的刪除功能也是下去跑recursive啊 10/21 21:08
MyNion14樓你可以用LinkedList配合二元樹去做,這樣取排程就是O(1) 10/21 21:09
MyNion15樓取完排程再插回去就是O(log n) 10/21 21:10
GTR1253416樓你講的東西相比之下不夠底層 10/21 21:20
longlongint17樓你的假設套PQ不適合 10/21 21:30
longlongint18樓你如果把派任務給你的人想成你主管 會比較好像 10/21 21:31
longlongint19樓比較好想像 (前面打錯字 10/21 21:31
longlongint20樓一直抽插任務 一下很急一下又取消 10/21 21:32
longlongint21樓然後一直改順序+要你多工顧多個任務 10/21 21:32
longlongint22樓然後跟你說哪個任務重要也不知道 你想辦法讓客戶爽 10/21 21:33
longlongint23樓這時候OS就要猜優先度+用PQ(linux是CFS 紅黑樹) 10/21 21:35
longlongint24樓看要排什麼事情做,然後又不能單一任務做太久 10/21 21:35
Apache25樓問就是去看底層 10/21 21:38
Apache26樓電腦裡面沒有小精靈 10/21 21:39
Apache27樓要動時間不是polling就是timer interrupt 10/21 21:39
Apache28樓這東西跟排程無關 有機會去看單片機實現排程的方式 10/21 21:42
lovdkkkk29樓用 map 日期時間字串當 key value 放該時間要跑的東西就 10/21 21:47
lovdkkkk30樓不用掃全部了? 10/21 21:47
更多請益
[請益] 台積IT部門請教
[請益] 請問這樣的git使用方式是否是正確的?
[請益] 如何速刷軟體證照
[請益] 流程圖畫法
[請益] 非本科在學如何增加實習機會
[請益] 趨勢的team請教
[請益] 官股銀 VS 證券
[請益] 台積IT部門請教