硬即時與軟即時(hard vs soft real-time)
兩個系統都承諾「準時」回應,但它們指的意思大不相同。想想汽車的安全氣囊控制器與影片串流 App。氣囊「必須」在撞擊後幾毫秒內展開——遲到不是「慢」,而是災難性的失敗。影片 App 應該準時顯示下一幀,但若某一幀稍晚,你會看到瞬間的小瑕疵,然後日子照過。這份對比——錯過期限究竟造成失敗還是只是惱人——就是硬即時與軟即時的差別。
期限(deadline)是回應必須完成的最晚時間。在「硬」即時系統裡,錯過「任何」期限都是系統失敗,可能很危險:想想安全氣囊、引擎點火正時、心律調節器、工業馬達控制。正確性的定義「包含」時序——一個遲到送達的正確答案就是錯誤答案。這些系統必須被設計與分析,使每個期限即使在最壞情況下也可被證明達成,這正是硬即時工作仰賴最壞情況執行時間分析、確定性排程與有上界中斷延遲的原因。在「軟」即時系統裡,期限是目標:錯過一個會降低品質(掉一幀影片、選單略卡)但系統仍可用,偶爾錯過也可接受。還有一個中間詞「韌即時」(firm real-time),指在期限後才到的結果毫無價值(你就丟棄它)但容許錯過一些。這些標籤描述的是「遲到的後果」,而非速度:一個硬即時系統的期限可以長達整整一秒。
它之所以重要,是因為它告訴你時序分析需要多嚴謹、你的設計必須提供什麼保證。誠實且常被搞混的重點:「即時」(不論硬軟)關乎「可預測性」與達成期限,「不」關乎快——一個偶爾且不可預測地卡住的快系統「不是」硬即時。多數消費性軟體(媒體播放、遊戲、UI)頂多是軟即時。而真正的硬即時保證通常需要硬即時作業系統,或細心的裸機設計加上最壞情況分析;在像一般 Linux 這種通用作業系統上跑一個攸關期限的任務,通常「不」能給出硬保證,因為作業系統可能引入無上界的延遲。
期限 = 觸發後 5 ms。 硬即時:氣囊點火脈衝。錯過一次 -> 系統失敗(不安全)。 必須被「證明」在最壞情況下達成 5 ms。 韌即時:即時算圖的一幀。遲到 -> 丟棄,毫無價值。 軟即時:UI 動畫的一步。遲到 -> 肉眼可見的微小卡頓,仍可接受。 注意:「平均很快」對硬即時「不」足夠——最壞情況才重要。
同一個數值期限,錯過它有三種後果:失敗(硬)、丟棄結果(韌)、品質降低(軟)。
硬即時關乎保證的最壞情況時序,而非速度:一個平均很快卻偶爾卡住的系統不是硬即時。一般 Linux 通常無法給硬保證,因為它可能引入無上界的延遲。