Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: ^Kenny^ от Март 11, 2012, 20:02



Название: Потоки и задержки
Отправлено: ^Kenny^ от Март 11, 2012, 20:02
Тема на стыке 2-х разделов, сети и многопоточность. Больше пеняю на многопоточность, поэтому сюда.


Имеется сервер, который обрабатывает UDP-пакеты. Цель -- сделать так, чтобы обрабатывалось 100 пакетов в секунду. Сейчас сотня проходит ~ за 2.

Все этапы обработки пишутся в лог-файл вместе с текущим временем (библиотека log4cplus). При этом, по ходу обработки между очередными этапами иногда выскакивает пауза, причем всегда фиксированное время - 15\16 мсек.
В итоге, на один пакет приходится 0, 15\16 или 31\32 мсек. Т.е. некоторые обрабатываются мгновенно, некоторые -- долго.

Для передачи пакета используется emit сигналов (т.к. передать нужно в соседний поток). Может ли это быть узким местом? Где-то тут в теме писали, что в соседний поток 80.000 раз в секунду у них проходили вызовы через сигналы из другого потока.

При этом, доходит даже до того, что между двух команд вывода в лог лежит строк 20 кода, весь -- работа со стандартными типами данных в QT + мат. операции (без циклов) а пауза между ними -- 16мсек.
С чем такое может быть связано??


Название: Re: Потоки и задержки
Отправлено: Bepec от Март 12, 2012, 06:52
С таймерами, с вызовом ф-ций в других потоках, с обновлением экрана, с частотой записи в файл.

У меня лично была проблема с созданием таймеров в основном потоке (сглупил ;) ). И потом постоянно на 3-7 пакет паузы были в 15-16 мс.

Так же говорит один уважаемый мною человек, что система может приостановить работу программы как раз на эти самые 15-16 мс.