Драйвер устройства не может немедленно обработать данные в своей процедуре прерывания. Он должен запланировать отложенный вызов процедуры (DPC), который в основном представляет собой процедуру обратного вызова, которая будет вызвана операционной системой как можно скорее. ... В системе имеется одна очередь DPC на процессор. ... Если какой-либо DPC будет работать слишком долго, другие DPC будут задержаны на это количество времени. ... К сожалению, многие существующие драйверы устройств не соответствуют этому совету. Такие драйверы проводят слишком много времени в своих процедурах DPC, вызывая исключительно большую задержку для DPC любого другого драйвера. Для драйвера устройства, который обрабатывает потоки данных в режиме реального времени, крайне важно, чтобы DPC, запланированный из его подпрограммы прерывания, выполнялся до того, как аппаратное обеспечение выдает следующее прерывание. Если DPC задерживается и работает после следующего прерывания, обычно происходит переполнение аппаратного буфера и поток данных прерывается. Выпадение происходит.
Ответ переполнения стека говорит:
DPC помещается в очередь в глобальной очереди DPC и может работать на любом процессоре. Так что, если у вас действительно длинный (-расход) DPC на одном ядре, другое ядро может свободно обрабатывать другое. Таким образом, любая временная информация действительно зависит от количества процессоров, которые у вас есть, и от того, сколько вещей выполняется в данный момент одновременно. Так что на многоядерных процессорах эти числа могут сильно различаться.
Обычно я читал, что быстрое двухъядерное ядро лучше, чем медленное четырехъядерное для аудио, так как большинство аудио приложений не оптимизированы для использования более одного ядра.
Но в современных компьютерах кажется, что проблемы с DPC являются узким местом для производства аудио. Означает ли это, что четырехъядерный процессор будет лучше, чем двухъядерный? Другие свободные ядра теоретически могут обрабатывать звуковые DPC, в то время как одно из них блокируется грубым подпрограммой Wi-Fi DPC. Распределяется ли очередь между ядрами, и DPC могут перемещаться в зависимости от того, кто из них свободен? Или существует одна очередь на ядро, позволяющая захватывать ядро? Как насчет виртуальных ядер?