Незавершенность, безусловно, будет большой частью этого. Я предполагаю, что для транспорта inproc существует минимум взаимодействия с операционной системой; таким образом, с минимальными накладными расходами ОС (передача сообщений, вероятно, немного больше, чем у memcpy, и, возможно, один или два семафора или что-то подобное) это так быстро, как может быть.
По сравнению с другими транспортами, ipc, tcp и т. д.; все они проникают в части ОС, над которыми проделана большая работа. Например, ipc (каналы) включает копирование из исходного буфера в буфер ОС, а затем обратное копирование из него в буфер назначения, а также все переходы от пользователя к контексту выполнения ОС, и их больше, если сообщения > 4 КБ (или любой размер системной страницы). С транспортом inproc переходов нет (может быть, один или два для семафоров) и, возможно, на один memcpy меньше. Точно так же изучение стека tcp требует большой вариативности.
PAIR также имеет минимальную сложность и накладные расходы для шаблона распределения. Строго один в один, не более. Так что это тоже мало накладных расходов. Это мое прочтение этого раздела Руководства, которые вы уже встречали. В PUB/SUB и т. д. происходит больше, чем необходимо для связи один-два-один.
Минимум взаимодействия с ОС и сложность в сочетании с минимальными задержками. Минимальное взаимодействие с ОС также на некоторых платформах поможет поддерживать постоянную задержку.
Я не очень хорошо разбираюсь во внутренностях ZeroMQ, но есть большая вероятность, что inproc+PAIR поверх ОС реального времени дает очень хорошую согласованность в задержке. Часто постоянство задержки имеет такое же значение, как и ее краткость.
person
bazza
schedule
28.10.2019