排程器生命週期
最後更新
本頁列出各排程器操作在
Start 之前與事件迴圈執行中的行為差異。各狀態下的操作
| 操作 | 未啟動 | 執行中 |
|---|---|---|
Add | 直接加入最小堆 | 經 add channel 送入事件迴圈 |
Remove | 停用並自最小堆移除 | 經 remove channel 移除 |
RemoveAll | 停用全部任務 | 經 removeAll channel 清空最小堆 |
Start | 啟動 Worker 池與事件迴圈 | no-op |
Stop | 回傳立即 cancel 的 context | 停止迴圈、等待 Worker 結束,回傳於進行中任務結束後 cancel 的 context |
Stop 後重新啟動
Stop 後再呼叫 Start 會重新啟動事件迴圈,無依賴任務會繼續觸發。依賴 Worker 不會恢復:Stop 關閉了 Worker 的停止 channel,Start 沿用同一個 channel,新的 Worker 一啟動就結束。依賴任務觸發時仍會送入佇列但不會被判斷,容量 1024 的 Wait 佇列滿了之後事件迴圈會阻塞。重新啟動後再次呼叫 Stop 會再關閉同一個 channel,並以 close of closed channel panic。帶有依賴任務的排程器請以 core.New 重新建立,而非重新啟動。New、Start、Stop 簽章見 排程器 API。