1

У меня есть приложение, которое связывается с 50 устройствами через последовательные порты. Обмен данными происходит в потоках, а потоки регулируются, так что только определенное число активно одновременно. Потоки создаются по мере необходимости, выполняют свою работу, завершают и освобождают свои используемые ресурсы.

В некоторых случаях последовательные порты реализованы с портами Ethernet Moxa TCP/IP. Драйвер Moxa работает на ПК, который представляет устройства Moxa в сети как COM-порт.

В других случаях последовательные порты реализуются через концентраторы USB, которые предоставляют по 10 последовательных портов каждый.

Здесь проблема. Когда используются только последовательные порты Moxa и (скажем) 8, загрузка ЦП приложения колеблется от 1% до 30%, в зависимости от того, сколько потоков активно. Приложение ведет себя разумно, а ПК отзывчив.

Если затем включить 8 портов USB, загрузка ЦП приложения достигает пика в 50-60%, как я и ожидал, но общее использование ЦП компьютера увеличивается почти до 100% и остается там. Не удивительно, что все останавливается.

Я использовал Process Explorer и обнаружил, что основная часть использования ЦП вне моего приложения была связана с двумя задачами - System Idle Process/DPC (отложенные вызовы процедур) и System Idle Process/System. Использование в этих задачах достигает 40% каждый. Когда используются только порты Moxa, эти задачи не показывают значительной загрузки ЦП.

Я попытался возиться с приоритетом потока, и это не имеет значения. Порты работают с относительно низкой скоростью передачи данных (2400).

Запуск средства проверки задержки DPC показывает время задержки до 6 мс, когда используются последовательные порты USB.

1 ответ1

1

Высокая загрузка ЦП объясняется тем, что в приложении каждый канал открыл свой последовательный порт в начале сеанса и оставил его открытым в течение всего сеанса приложения. Это было хорошо с портами, основанными на адаптерах Ethernet-COM-портов Moxa, или с "локальными" портами, но в портах USB, просто открытый порт вызывает использование ЦП DPC. Наличие 16 открытых портов USB делает компьютер непригодным для использования, несмотря на отсутствие трафика на любом порту.

Я изменил приложение так, чтобы порты открывались всякий раз, когда они требуются (что происходит только на несколько секунд каждую минуту или около того), и закрывались сразу после этого.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .