中斷與輪詢的差異:比較機制與使用時機
處理器得知裝置需要處理的方式有兩種。輪詢是由 CPU 在迴圈中反覆確認裝置的狀態。中斷則是由裝置向 CPU 送出訊號,CPU 暫停手邊的工作去執行一個小型的處理常式,之後再回到原本的工作。輪詢簡單且容易預測,但會浪費時間;中斷有效率且回應快,但會增加負擔,也讓程式的行為更難掌握。
| 項目 | 輪詢 | 中斷 |
|---|---|---|
| 機制 | CPU 反覆讀取狀態暫存器,確認裝置是否就緒 | 裝置發出訊號,CPU 中斷工作並執行中斷處理常式(ISR) |
| 等待期間的 CPU | 忙碌。耗用週期來進行確認 | 閒置。可以處理其他工作或進入睡眠 |
| 回應時間 | 由迴圈的確認間隔決定。容易預測 | 快(微秒等級)。但會因遮罩、優先權與上下文儲存而改變 |
| 額外負擔 | 即使什麼都沒發生也是固定的 | 每個事件都有成本。事件非常多時,CPU 會來不及處理(中斷風暴) |
| 複雜度 | 容易撰寫,也容易除錯 | 複雜。處理常式必須簡短,與主程式共用的資料也要小心(volatile、原子存取) |
| 耗電量 | 讓 CPU 一直保持喚醒 | 可在低耗電下睡眠,直到被事件喚醒 |
| 時序是否容易掌握 | 容易掌握 | 處理常式與主程式之間可能發生並行處理的錯誤 |
| 主要用途 | 非常快速或連續的事件、簡單的程式、高速網路驅動程式 | 計時器、按鈕、通訊事件、感測器警報、從睡眠中喚醒 |
數值為具代表性的大致參考值,會因世代或產品而異。