文件

核心概念

優先級排序、等待時間晉升、逾時推算、重試與原子佇列狀態機。

優先級

數值愈小愈先執行。Heap 先比 priority,再比較早的 startAt

常數 說明
PriorityImmediate 0 最高,立刻執行
PriorityHigh 1 高優先
PriorityRetry 2 失敗後重新入隊的重試任務
PriorityNormal 3 一般(依 preset 查表語意)
PriorityLow 4 最低;等待後可晉升

已定義 preset 項目若未設定 PresetConfig.Priority,Go 零值為 PriorityImmediate(iota 0)。

優先級晉升

每次 Pop 時,pending 會掃描 heap,可能提升久等的任務:

來源 等待時間 目標
Low clamp(Timeout, 30s, 120s) Normal
Normal clamp(Timeout*2, 30s, 120s) High

晉升只會往更高優先(較小數值)。Immediate、High、Retry 不在此自動晉升規則內。

逾時推算

基準為 Config.Timeout(預設 30s);preset 的 Timeout > 0 時可覆寫。再依優先級調整,並限制在 15s–120s

Priority 計算
Immediate timeout / 4
High / Retry timeout / 2
Normal timeout
Low timeout * 2

單次入隊的 WithTimeout 會覆寫該任務的推算結果。

執行、panic 與重試

每個 worker 在子 goroutine 中以 context.WithTimeout 執行 action

呼叫 WithRetry() 且未帶參數時,預設 retryMax3

狀態機

狀態 意義
Created New 之後;尚未 Start 前 worker 迴圈未啟動
Running Worker 運作中
Closed 不再接受 Push;排空後結束

狀態轉換使用 atomic.Uint32 CAS,公開狀態欄位無 mutex。佇列已關閉或已滿時 Enqueue 失敗。從任何非 Closed 狀態呼叫 Shutdown 皆安全且冪等。

相關頁面

EN