Wiki
延迟过程调用(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执行了很长时间并且另一次中断产生了新的缓冲区数据,在第一块数据被处理前,会发生信号缺失结果。[1]