Название: Потоки и задержки Отправлено: ^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 мс. |