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