Оптимизация внешней компоненты 1С "RabbitMQ" на C/C++
https://1clancer.ru/task/77134
Цель: Требуется оптимизировать загрузку ЦП внешней компонентой 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) вместо постоянного опроса.
Проект компоненты: Исходники: https://github.com/BITERP/PinkRabbitMQ Тикет на оптимизацию: https://github.com/BITERP/PinkRabbitMQ/issues/105