深入淺出談 Queue:順序很重要
photo by John Cameron 剛好昨天看了小Lin老師的影片,提到委內瑞拉這個國家,天天都在排隊 加油排隊、去超市也排隊 排隊這件事,其實跟系統處理工作的順序一樣 順序一亂,待季就大條了,這時候使用Queue來管理執行順序,是一個很好的方法 什麼是 Queue Queue 是一種 先進先出 (First-In,First-Out,FIFO) 的資料結構 Queue跟Stack一樣,定義了使用者只能用那些操作 換來一致性的時間複雜度 Queue的時間複雜度 操作 Queue 時間複雜度 push 插入資料到最後位置 O(1) pop 刪除最前面的資料 O(1) front 取得最前面的資料 O(1) 使用Queue最佳場景 假設現在有三個Job依序執行,而執行中很可能因為系統當機導致需要重做 這時候應該把Job放在哪種資料結構中: A:List搭配index B:Queue 看起來A、B都可以,實際上會造成很大的落差 情境A List搭配index list = [A, B, C] i = load_index() // 持久化的進度 while i < list.length: job = list[i] do_side_effect(job) // 例如:寄信 / 扣款 / 發送檔案 // 這裡可能成功、也可能一半成功、也可能成功但你還沒來得及記錄 i = i + 1 save_index(i) // 持久化進度 crash可能發生在: ...