Будет ли вызов sendero (ZeroMQ inproc PubSub) в потоке реального времени вызвать серьезную блокировку? - PullRequest
2 голосов
/ 27 сентября 2019

Как правило, кольцевой буфер необходим для того, чтобы поток производителя в реальном времени имел приличную производительность.

Но в моем случае у меня есть некоторые ограничения по задержке, поэтому я бы хотел избавиться от кольцевого буфера от Producer и выдвигать отдельные буферы данных по мере их появления.Тогда я бы использовал кольцевой буфер только на стороне потребителей (медленнее).И я бы хотел избежать блокировки потоков через критические секции.

Поскольку ZMQ не требует блокировки потоков, мне интересно, можно ли использовать для этого шаблон inproc PubSub.Зная, что сетевой ввод / вывод не приветствуется в потоке реального времени, мне все еще интересно, может ли протокол inproc иметь какое-либо значение, то есть повысить производительность.

Итак, вопрос в том, могу ли ядобиться доставки данных без блокировок / без блокировок с малой задержкой в ​​потоке реального времени с использованием ZMQ PubSub с протоколом inproc?

1 Ответ

1 голос
/ 27 сентября 2019

Q : Можно ли добиться доставки данных без блокировок / без блокировок с низкой задержкой в ​​потоке реального времени с использованием ZMQ PubSub с протоколом inproc?

Да.


Достаточно, чтобы создать экземпляр без потока Context(0) экземпляр:

Нет I /O потоки участвуют в передаче сообщений с использованием транспорта inproc.Поэтому, если вы используете контекст ØMQ только для внутрипроцессного обмена сообщениями, вы можете инициализировать контекст с нулевыми потоками ввода / вывода


Уловки сходства (разумно спланированного связывания) могут еще больше сбритьнесколько сотен [ns] из-за возможного избежания всей обработки R / T из-за значительных дополнительных затрат на задержку из-за обращений NUMA-нелокальной памяти от ядра к ядру.

...