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