完成時間預估器
根據吞吐速率推算長時間任務的剩餘時間和完成時刻。輸入總量、已完成量和處理速度,立即得到剩餘耗時與預計完成時間點。
這個任務還要跑多久? 填入總量、已完成量和當前速率,工具會算出剩餘耗時、總耗時,並給出具體的完成時刻。
根據吞吐速率推算長時間任務的剩餘時間和完成時刻。輸入總量、已完成量和處理速度,立即得到剩餘耗時與預計完成時間點。
這個任務還要跑多久? 填入總量、已完成量和當前速率,工具會算出剩餘耗時、總耗時,並給出具體的完成時刻。
ETA 本質上就是一次除法:剩餘工作量除以速率。還剩 40000 行、每分鐘處理 500 行,就是 80 分鐘。這個工具幫你完成這次除法,把結果換算成易讀的單位,再加到開始時間上,直接給出鐘錶上的時刻,省去你心算加法的麻煩。
真正麻煩的不是除法,而是這次除法預設「你測到的速率會一直保持到結束」,而這個假設錯的次數往往多於對的次數。批次匯入會隨著索引增大而變慢;下載會在 TCP 慢啟動結束後加速;批處理任務可能突然遇到一段異常大的記錄。ETA 是對當下的投影,不是對未來的預言——在把這個數字寫進進度彙報之前,最好先把這句話說清楚。
因為估算結果完全繼承你餵給它的速率,所以「測量視窗」是這個頁面上影響最大的輸入。取最近十秒的速率,靈敏但抖動劇烈:每看一次都會得到不同的 ETA。取整個執行期的平均速率,穩定但遲鈍:任務早就卡住了,它還在報一個樂觀的數字。
短任務用全程平均值即可。以小時計的任務,用幾分鐘的滾動視窗通常最平衡:足夠新以察覺變慢,又足夠長以忽略偶發抖動。如果兩種演算法給出的結果差距很大,這個差距本身就是有用的訊號——說明速率正在變化,此時誠實的答案是一個區間,而不是一個精確時刻。
工具同時給出總耗時和剩餘時間,兩者放在一起比單看任何一個都更有資訊量。如果任務只完成了 5%,而總耗時顯示十一個小時,那麼無論剩餘時間是多少,你都可以立刻判斷:這不是一個應該盯著看的任務。它也提供了一次合理性校驗——如果推算出的總耗時和上週同樣的任務差得離譜,要麼速率測錯了,要麼確實發生了變化,兩種情況都值得在任務跑完之前查清楚。
顯示進度百分比也是同樣的道理。任務剛開始、完成量還很小時,速率估計建立在極少的樣本上,ETA 幾乎沒有意義。看著百分比往上爬,你才知道這個估算什麼時候才積累了足夠的資料、值得拿出來引用。