Russian Qt Forum
Ноябрь 23, 2024, 18:40
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Работа с сетью
>
Необходимость нового потока для очередно
Страниц: [
1
]
2
3
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Необходимость нового потока для очередно (Прочитано 18962 раз)
brucemax
Гость
Необходимость нового потока для очередно
«
:
Декабрь 14, 2012, 10:58 »
Здравствуйте! Программа создаёт набор подключений (сокетов.. около 10) для обмена инфой с другими устройствами. Насколько важно создавать отдельный поток для каждого подключения (сокета)? Первая мысль, что это зависит от тяжести операция при обмене данными.. тогда как судить об этой тяжести.. хватит ли одного потока для всех подключений..? или не мучиться с вопросом "хватит/не хватит" и сразу делать многопоточную архитектуру!?!
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Необходимость нового потока для очередно
«
Ответ #1 :
Декабрь 14, 2012, 11:57 »
А что за обмен? На сколько интенсивен?
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
brucemax
Гость
Re: Необходимость нового потока для очередно
«
Ответ #2 :
Декабрь 14, 2012, 12:26 »
Цитата: Пантер от Декабрь 14, 2012, 11:57
А что за обмен? На сколько интенсивен?
Tcp.. Инфа о состоянии тех устройств к которым подключаемся.. их мониторинг плюс небольшое управление (команды). Точно пока не смогу сказать насколько часто посылки буду осуществляться.. возможно около раза в пол секунды для одного подключения.. хотя в будущем возможно и чаще.
Записан
Bepec
Гость
Re: Необходимость нового потока для очередно
«
Ответ #3 :
Декабрь 14, 2012, 12:36 »
Ыыы... раз в 500 мс. пстц. Я тут за 20 мс борюсь на приём/ответ/обработку, а они... эхх... многопоточная архитектура...
Записан
brucemax
Гость
Re: Необходимость нового потока для очередно
«
Ответ #4 :
Декабрь 14, 2012, 12:53 »
Цитата: Bepec от Декабрь 14, 2012, 12:36
Ыыы... раз в 500 мс. пстц. Я тут за 20 мс борюсь на приём/ответ/обработку, а они... эхх... многопоточная архитектура...
Наверное это я погорячился.. будет чаще. Мне б просто эту грань научиться видеть.. многопоточная/немногопоточная..
Записан
Bepec
Гость
Re: Необходимость нового потока для очередно
«
Ответ #5 :
Декабрь 14, 2012, 13:00 »
Мну раз в 20 мс приходят уходят. Нужды в многопоточности не вижу. (1 поток гуи, 1 поток работа, чтоб гуи не застывало).
Записан
brucemax
Гость
Re: Необходимость нового потока для очередно
«
Ответ #6 :
Декабрь 14, 2012, 13:18 »
Цитата: Bepec от Декабрь 14, 2012, 13:00
Мну раз в 20 мс приходят уходят. Нужды в многопоточности не вижу. (1 поток гуи, 1 поток работа, чтоб гуи не застывало).
А вдруг потом заказчику что в голову стукнет и он скажет "а давайка ещё сообщения об этом и об этом впихнём!!" и придётся переделывать всё архитектуру.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Необходимость нового потока для очередно
«
Ответ #7 :
Декабрь 14, 2012, 13:26 »
Цитата: brucemax от Декабрь 14, 2012, 10:58
Насколько важно создавать отдельный поток для каждого подключения (сокета)?
Это также перетиралось здесь много раз, общий вывод: эта схема не годится для высоко нагруженных серверов, хотя и удобна/проста в реализации
Записан
Bepec
Гость
Re: Необходимость нового потока для очередно
«
Ответ #8 :
Декабрь 14, 2012, 13:28 »
Я те по секрету скажу - у меня примерно 8 линий по 120 устройств
И протокол собственный разработанный. И он позволяет обеспечивать работу их всех с приёмлимой задержкой.
А уж места под "развёртывание" у него дохренища. Ещё ровно 4 мс есть под новый функционал
Хотя у меня чуть иная ситуация, у меня RS-485 линии + коммутаторы. Быстродействие требуется максимальное.
PS а вот у тебя меньше 50 устройств планируется. Вот и не мучайся.
PPS вот только у меня организация.
Записан
brucemax
Гость
Re: Необходимость нового потока для очередно
«
Ответ #9 :
Декабрь 14, 2012, 16:11 »
Цитата: Bepec от Декабрь 14, 2012, 13:28
Я те по секрету скажу - у меня примерно 8 линий по 120 устройств
И протокол собственный разработанный. И он позволяет обеспечивать работу их всех с приёмлимой задержкой.
А уж места под "развёртывание" у него дохренища. Ещё ровно 4 мс есть под новый функционал
Хотя у меня чуть иная ситуация, у меня RS-485 линии + коммутаторы. Быстродействие требуется максимальное.
PS а вот у тебя меньше 50 устройств планируется. Вот и не мучайся.
PPS вот только у меня организация.
Солидно =) А можете с архитектурой подсказать.. так как опыта в этом у меня совсем мало.. вот думаю, что будет класс описывающий само утройство: допустим CDevice (до 10 экземпляров), который для создания подключения обращается к классу отвечающему за сетевые подключения CNetworkProvider(наверно целесообразно сделать его cинглтоном), который и будет хранить в себе объекты подключения (сокеты, или объекты отвечающие за сокеты и содержащие их: CTcpConnection) которые будут привязаны сигналами каждый к своему экземпляру CDevice. Теперь.. CNetworkProvider стартует в себе новый поток куда впоследствии и отправляются методом moveToThread() созданные подключения (сокеты или объекты CTcpConnection).
Вообщем стоит ли дальше развивать такую архитектуру или это совсем бредовые мысли?)) Может пример на эту тему есть!? Направьте на путь истинный пожалуйста..
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Необходимость нового потока для очередно
«
Ответ #10 :
Декабрь 14, 2012, 16:40 »
Цитата: Bepec от Декабрь 14, 2012, 13:28
Я те по секрету скажу - у меня примерно 8 линий по 120 устройств
Не стоит красоваться "голым числом"
Напр 100 линий по 1000 устройств могут быть относительно легкой задачей. И наоборот, всего 5 линий всего по 10 - очень трудной. Все зависит от того что считать "приемлЕмой задержкой"
Записан
Fregloin
Супер
Offline
Сообщений: 1025
Re: Необходимость нового потока для очередно
«
Ответ #11 :
Декабрь 14, 2012, 16:44 »
Попробуй пул потоков, может это то что нужно для тебя?
Записан
brucemax
Гость
Re: Необходимость нового потока для очередно
«
Ответ #12 :
Декабрь 14, 2012, 16:58 »
Цитата: Fregloin от Декабрь 14, 2012, 16:44
Попробуй пул потоков, может это то что нужно для тебя?
Да я как-то изучал этот пул с его QRunnable.. да в чём-то облегчает жизнь, но всё-таки решил пользоваться QThread.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Необходимость нового потока для очередно
«
Ответ #13 :
Декабрь 14, 2012, 17:31 »
Цитата: brucemax от Декабрь 14, 2012, 16:11
Вообщем стоит ли дальше развивать такую архитектуру или это совсем бредовые мысли?)) Может пример на эту тему есть!? Направьте на путь истинный пожалуйста..
А с чего Вы взяли что такой путь есть вообще?
Все зависит от конкретной задачи, только простые/типовые сводятся к переписанному и (кое-как) измененному примеру, остальные требуют мЫшления и самостоятельных решений. Это кому нравится, кому нет.
С точки зрения многопоточности "идеальная архитектура" давно известна. Число ниток = числу ядер + 1. Однако мало кто горит желанием делать "идеальную", т.к. обычно это сводится к выделению независимых подзадач которые могут быть скормлены любой их рабочих ниток. Это очень трудно и составляет 90% работы.
Поэтому часто идут на упрощения, напр/типа 1 коннект = 1 нитка. Да, это конечно "до определенного предела" - дальше все время ОС будет тратить на переключения между нитками. Но до того это будет работать вполне хорошо - и это сократит время разработки во много (может в десятки) раз. Отсюда и рекомендации типа "да не парься" - они имеют реальный, практический смысл.
Записан
Bepec
Гость
Re: Необходимость нового потока для очередно
«
Ответ #14 :
Декабрь 14, 2012, 17:36 »
Я бы посоветовал, да незнаю задачи и устройств
У меня к примеру охранка.Там скорость обработки важна + наивысший приоритет тревог. А у тебя я незнаю что
to Igors:
Ну дай, ну дай мне похвастаться
Я может быть ради этого момента на форуме регистрировался
PS и вообще мы на OPC переходим. Хоть и дороговат, но от головной боли по проектированию избавляет.
Записан
Страниц: [
1
]
2
3
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...