ПОМОГИТЕ ПОЖАЛУЙСТА! У меня есть приложение, которое требует максимально возможной обработки в реальном времени, и я продолжаю сталкиваться с этой необычной проблемой задержки как с TCP, так и с UDP. Задержка происходит, как по маслу, и она всегда одинакова (чаще всего от 15 до 16 мс). Это происходит при передаче на любую машину (даже локальную) и в любой сети (у нас их две).
Быстрое решение проблемы:
Я всегда использую winsock в C ++, скомпилированную в VS 2008 Pro, но я написал несколько программ для отправки и получения различными способами, используя как TCP, так и UDP. Я всегда использую промежуточную программу (запущенную локально или удаленно), написанную на разных языках (MATLAB, C #, C ++), для пересылки информации из одной программы в другую. Обе программы winsock работают на одной машине, поэтому они отображают временные метки для Tx и Rx с одинаковых часов. Я продолжаю наблюдать появление шаблона, при котором пакет пакетов будет передан, и затем перед следующим пакетом будет задержка около 15-16 миллисекунд, несмотря на то, что не запрограммирована никакая задержка. Иногда между каждым пакетом может быть 15-16 мс вместо пакет пакетов. В других случаях (редко) у меня будет другая задержка, например ~ 47 мс. Кажется, я всегда получаю пакеты обратно в течение миллисекунды после их передачи, хотя между передаваемыми пакетами наблюдается одинаковая задержка.
У меня есть подозрение, что winsock или NIC буферизуют пакеты перед каждой передачей, но я не нашел никаких доказательств. У меня есть гигабитное соединение с одной сетью, которая получает различные уровни трафика, но я также испытываю то же самое при запуске промежуточной программы в кластере с частной сетью без трафика (по крайней мере от пользователей) и 2-гигабитным соединением. Я даже почувствую эту задержку при локальном запуске промежуточной программы с отправляющей и принимающей программами.