Есть программулина в несколько нитей. На нити возложены различные задачи. В частности есть одна, интересующая нас нить. Эта нить опрашивает по TCP некое устройство. Протокол простой - запрос ответ, запрос ответ и т.д. Используется неблокирующий сокет и select. Запрос отсылается примерно раз в 20-30мс. Среднее время ответа < 1мс. Время ответа определяется так: определяется время до вызова select и сразу после. Машина на которой крутиться программа и опрашиваемое устройство соединены ethernet напрямую. То есть влияние промежуточного канального оборудования исключается. Проблема такая. Иногда время ответа становиться равным 208-210мс. Это для приложения очень критично. Как я вижу, где может быть проблема 1) устройство тормозит с ответом 2) какие-то сетевые заморочки 3) проблема в планировщике (данные по ethernet пришли, но процесс остаётся заблокированным по каким-то причинам). Для теста была написана маленькая программулина, которая только опрашивает устройство. Подобных задержек на ней не наблюдается. Причём независимо от того работает она одна или параллельно с основной. То есть устройство отвечает быстро и в сети всё в порядке. Остаётся причина 3. Дальше интереснее. Если тестовая программа работает параллельно с основной, то в основной нет этих задержек (по крайне мере суточный тест их не выявил). Как только тестовую задачу останавливаем, через некоторое время основная начинает отлавливать задержки. Включаем тестовую задержки исчезают. Ощущение, что данные как будто застраивают, и второй поток их проталкивает.
В чём может быт проблема? Как установить причину?