Оптимизация внешней компоненты 1С "RabbitMQ" на C/C++
https://www.fl.ru/projects/5463092/optimizatsiya-vneshney-komponentyi-1s-rabbitmq-na-c-c.html
Цель: Требуется оптимизировать загрузку ЦП внешней компонентой 1С, реализованной на C/C++, и предназначенной для интеграции 1С и брокера сообщений "RabbitMQ".
Описание проблемы: При вызове метода компоненты "Connect" наблюдается повышение загрузки ЦП на 25%, т.е. фактически не выполняя еще каких-либо операций с брокером ЦП уже на 1/4 чем-то занят. Есть предположение, что при вызове этого метода в компоненте выполняется какой-то бесконечный цикл ожидания, который бесполезно сильно нагружает ЦП.
Возможные варианты решения: Блокирующие циклы без sleep / условной ожидалки busy-wait и 100% CPU; Фоновые таски «крутят» CPU при ожидании состояния/разрыве; При разрыве соединения цикл продолжает без паузы — CPU 100%, сервер 1С «подвисает»; Надо заменить busy-wait на event-driven (condition_variable / std::future / event loop) или как минимум вставить экспоненциальный backoff/sleep при ошибках. В контексте AMQP-CPP — использовать callback-архитектуру (onConnected/onClosed) вместо постоянного опроса.
Проект компоненты: Исходники: github.com/BITERP/PinkRab... Тикет на оптимизацию: github.com/BITERP/PinkRab...