Несколько потоков в реальном времени вызывают узкие места в соединении сокета udp

У меня есть приложение, которое в настоящее время использует три потока, все настроено для планирования в реальном времени, для получения данных через соединение сокета udp. Я использую три потока, чтобы попытаться ускорить конвейер данных, то есть один опрашивает данные и извлекает их из буфера recv, другой копирует данные в очередь, а третий записывает в файл.

Будет ли наличие нескольких потоков в реальном времени вызывать проблемы в соединении udp, например, если поток, пытающийся скопировать данные, будет конкурировать с потоком, пытающимся получить данные из буфера?


person Rob    schedule 05.02.2012    source источник


Ответы (1)


Да, увеличение приоритета потока до режима реального времени кажется плохой идеей, см. этот пост для получения дополнительной информации.

Рассматривали ли вы противоположный подход? Иметь две или более копий одного и того же потока, выполняющих операции чтения и копирования. Теперь синхронизируйте их, чтобы как только первый поток закончил чтение и начал копировать данные в очередь, второй поток уже начал чтение. Сохранение данных из очереди в файл, вероятно, лучше всего выполнять в одном потоке (если у вас нет нескольких дисков и т. д.).

person Krzysztof Kozielczyk    schedule 08.02.2012