Russian Qt Forum
Ноябрь 02, 2024, 00:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Qt sockets vs Native sockets (speed comparison)  (Прочитано 15602 раз)
mutineer
Гость
« Ответ #15 : Апрель 12, 2011, 11:31 »

Если выполнять flush(), то добирается тут же до АПИ и отправляет. Если не выполнять, то через очередь сообщений система выполняет ему flush() когда считает нужным
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #16 : Апрель 12, 2011, 12:56 »

Если выполнять flush(), то добирается тут же до АПИ и отправляет. Если не выполнять, то через очередь сообщений система выполняет ему flush() когда считает нужным
Или же в режиме Unbuffered оно без очереди сообщений сразу через АПИ шлет.
Записан

ArchLinux x86_64 / Win10 64 bit
SABROG
Гость
« Ответ #17 : Апрель 12, 2011, 13:54 »

Пересобрал MSVCшные нативные сокеты с помощью MinGW, чтобы исключить разницу в оптимизации компиляторов. В итоге все приложения собраны с помощью g++ 4.4.0. Закомментировал отключение алгоритма Nagle, т.к. в нативном примере их отключения нет. Пока результаты такие.

Код:
MinGW Native:
Duration is: 4 min
CPU Load: 36% (18% client, 18% server)

Qt:
Duration is: 28 min
CPU Load: 60% (30% client, 30% server)

Qt Client <-> Server Native:
Duration is: 17 min
CPU Load: 55% (50% Client, 5% server)

Qt Server <-> Client Native:
Duration is: 14 min
CPU Load: 55% (10% Client, 45% Server)

Кстати алгоритм выбран неудачно, т.к. скорость скачивания и загрузки падает до минимального значения. Думаю надо переписать клиент и сервер, чтобы они не слали данные в виде ответа на полученные данные от клиента.
« Последнее редактирование: Апрель 12, 2011, 14:05 от SABROG » Записан
Gabriel.vs
Гость
« Ответ #18 : Апрель 12, 2011, 14:04 »

Если выполнять flush(), то добирается тут же до АПИ и отправляет. Если не выполнять, то через очередь сообщений система выполняет ему flush() когда считает нужным

Сделал, время сократилось на 3 минуты 30 секунд.
Записан
mutineer
Гость
« Ответ #19 : Апрель 12, 2011, 14:05 »

Пересобрал MSVCшные нативные сокеты с помощью MinGW, чтобы исключить...

Оно запустилось? У меня Qt-шный клиент при запуске выдает
Цитировать
QSocketNotifier: socket notifiers cannot be enabled from another thread
Ну и естественно никуда не подключается
Записан
Gabriel.vs
Гость
« Ответ #20 : Апрель 12, 2011, 15:01 »

Написал свои обработчики write( ) и read( ). Внутри них посылка данных идёт через getChar( ) и putChar( ). Выполняться стало ещё быстрее, на пару минут.
Записан
SABROG
Гость
« Ответ #21 : Апрель 13, 2011, 00:05 »

Написал свою реализацию клиента на Qt. Сервер взял нативный подправленный для MinGW.

Результат 2 минуты. Это где-то 5Мб/с.

Завтра попробую написать свою версию сервера на Qt.
---
До написания сервера не дошли руки, много работы.
« Последнее редактирование: Апрель 15, 2011, 23:06 от SABROG » Записан
SABROG
Гость
« Ответ #22 : Апрель 15, 2011, 22:57 »

Дописал сервер. Теперь одно приложение можно запускать как клиент так и сервером. Причем если дефолтный порт свободен, то приложение запускается как сервер, если занят, то как клиент. Таким образом для теста нужно просто два раза запустить одну и ту же программу.

Новый результат: 30 секунд. Т.е. около 20Мб/с.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.091 секунд. Запросов: 22.