Ваше время ожидания будет варьироваться, но оно будет далеко не лучшим из того, что вы можете получить.Вот несколько вещей, которые будут стоять на вашем пути к лучшей задержке:
Boost.ASIO
- Он постоянно выделяет / освобождает память для хранения «состояния»для вызова функции обратного вызова, связанной с вашей операцией чтения.
- Она делает ненужной
mutex
блокировку / разблокировку для поддержки разорванного сочетания асинхронных и синхронизирующих подходов. - Худшее,он постоянно добавляет и удаляет дескрипторы событий из базового механизма уведомлений.
В общем, asio
- хорошая библиотека для разработчиков приложений высокого уровня, но она поставляется с большим ценником имного процессорного цикла ест гремлины.Другая альтернатива - libevent
, она намного лучше, но все еще нацелена на поддержку многих механизмов уведомления и независимость от платформы.Ничто не может побить нативные механизмы, например epoll
.
Прочие вещи
- UDP-стек.Это не очень хорошо работает для чувствительных к задержке приложений.Одним из самых популярных решений является OpenOnload.Он обходит стек и работает напрямую с вашим NIC.
- Планировщик.По умолчанию планировщик оптимизирован для пропускной способности, а не задержки.Вам нужно будет настроить и настроить свою ОС, чтобы ориентировать ее на задержку.Linux, например, имеет много «rt» патчей для этой цели.
- Остерегайтесь не спать.Когда ваш процесс находится в спящем режиме, вы никогда не получите хорошую задержку при пробуждении по сравнению с постоянно горящим процессором и ожиданием прибытия пакета.
- Помехи другим IRQ, процессам и т. Д.
Я не могу сказать вам точные цифры, но при условии, что вы не будете получать много трафика, используя Boost и обычное ядро Linux, с обычным оборудованием, ваша задержка будет колебаться где-то между ~ 50 микросекундами и ~ 100 миллисекундами.Это немного улучшится, когда вы получите больше данных, и после некоторого момента начнете падать, и всегда будет ранжироваться.Я бы сказал, что если вы согласны с этими цифрами, не пытайтесь оптимизировать.