延遲過程調用

延遲過程調用 ( DPC ) 是Microsoft Windows操作系統的機制 ， 允許高優先級任務 （ 如 ） 延遲所需的低優先級任務稍後執行 。 這使得設備驅動程序與其他低層事件消費者更快地執行其處理的高優先級部分 ， 調度非關鍵的附件處理稍後以較低優先級執行 。 DPC是通過DPC對象實現的 。 當設備驅動程序或其他內核態程序發出DPC請求時 ， 操作系統內核創建DPC對象 ， 投寄到DPC隊列尾部 。 多核處理器的每個內核有自己的DPC隊列 。 當Windows操作系統的IRQL降低到Dispatch / DPC級 ， 操作系統檢查DPC隊列 ， 逐個執行掛起的DPC ， 直至隊列爲空或者發生IRQL更高的中斷 。 例如 ， 當時鍾中斷髮生時 ， 時鐘中斷服務程序通常增加當前線程的計數器以計算當前線程的總執行時間 ， 把它的時間片減1 。 當時間片減少到0 ， 線程調度器將被喚醒去選擇下一個在當前處理器內核上運行的線程並做線程上下文切換 。 時鐘中斷服務程序運行在非常高的IRQL上 ， 它應該在稍後的IRQL下降到低級時纔去執行線程調度程序 。 因此時鐘中斷服務程序請求一個DPC對象並把這個對象放在DPC隊列尾部 ， 當處理器的IRQL下降到DPC / Dispatch級別時 ， 回去執行DPC隊列中的任務 。 當流音視頻工作時 ， 使用DPC處理流輸入到緩衝區的音頻 。 如果另外一個DPC執行了很長時間並且另一次中斷產生了新的緩衝區數據 ， 在第一塊數據被處理前 ， 會發生結果 。