Клиент QPID C++ Многопоточная оптимизация

Я ищу лучший способ использовать клиент C++ Apache QPID для оптимальной производительности при высоком трафике сообщений.

Наш брокер будет включать в себя 3 биржи, каждая с 2 однонаправленными очередями. Будет значительный трафик в 3 очередях "восходящей линии связи", на которые будет нажимать клиент С++.

Существует несколько малодокументированных классов, используемых для взаимодействия с брокером QPID. Соединение, сеанс, отправитель и получатель. Соединения предоставляют сеансы, а сеансы предоставляют отправителей или получателей. После прочтения различной документации QPID мне неясно, какие из этих объектов являются потокобезопасными (или не потокобезопасными) или что приводит к созданию потока в клиентской библиотеке. Согласно QPID FAQ, многопоточность в брокере происходит на уровне сеанса. Не упоминается, где это происходит у клиента.

В клиентском приложении будет несколько контекстов потоков, которые должны будут передавать данные в одну из очередей восходящего канала. Лучше ли иметь пул сеансов, соединений или отправителей, которые будут обслуживать несколько контекстов? Или QPID имеет встроенную оптимизацию для этого сценария, что потенциально означает, что 1 общего отправителя будет достаточно?

Цель состоит в том, чтобы не иметь где-то одного узкого места в потоке, а иметь возможность эффективно масштабироваться параллельно в зависимости от имеющейся нагрузки трафика.


person Conman27    schedule 03.04.2012    source источник


Ответы (1)


Многопоточность в брокере происходит на уровне соединения. т.е. весь трафик в данном соединении сериализуется и обслуживается пулом потоков. На клиенте существует пул потоков, совместно используемых всеми подключениями, которые будут выполнять требуемый ввод-вывод. Приложения могут сами создавать потоки для управления отправителями/получателями. Все упомянутые объекты (соединения, сеансы, отправители и получатели) предназначены для потокобезопасности, однако, как правило, я бы рекомендовал поток на сеанс и, возможно, один сеанс на соединение как оптимальный.

person Gordon Sim    schedule 04.04.2012
comment
Привет, есть ли информация о безопасности потоков в документах или где-то еще? Спасибо. - person ipavlu; 31.03.2016