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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Multithread server  (Прочитано 7688 раз)
laeda
Гость
« : Май 13, 2006, 07:19 »

Привет всем! Подскажите плиз. Надо написать сервер, который принимает запросы от клиентов и распределяет эти запросы по всем машинам, которые доступны в локальной сети, т.к. обьем вычислений очень большой. Нагрузка на эти машины распределяться тоже должна равномерно,т.е. они тоже должны быть многопотоковыми. Что лучше использовать Qsocket или QsocketDevice? Синхронный или асинхронный сервер? Что можно почитать на эту тему?
Записан
Sergeich
Гость
« Ответ #1 : Май 13, 2006, 15:07 »

Не кисло Улыбающийся Все зависит от задачи. Что за запросы и какого типа вычисления? Какая сетка ( винда, линух или смесь ) ? Какая версия Qt?
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #2 : Май 14, 2006, 15:05 »

если нудно много считать а не передавать
то считают пакетами!

пакет обсчитал  - передал!
Записан
Вудруф
Гость
« Ответ #3 : Май 15, 2006, 13:14 »

Всё зависит от требований к задержкам. Если их должно быть как можно меньше, то пакетный способ подходит плохо. Если определённые допущения могут быть, то тогда после обсчёта достаточно большого пакета машина должна передавать результаты и обращаться за новым. Поскольку формируется очередь запросов, то в асимптотике получаем распределение работ пропорциональное мощности машин.
Если найдёшь что почитать - поделись, пожалуйста. У меня сходная задача в дипломной работе. Взамен могу порекомендовать почитать информацию по GRID-системам, скажем, здесь: http://www.research.ibm.com/journal/sj43-4.html
Записан
laeda
Гость
« Ответ #4 : Май 15, 2006, 14:46 »

задача ведь не на столько сложна. Пакеты очень маленькие, всего одна строчка и один int. Попробую описать задачу поподробнее. Клиент посылает этот маленький пакет диспетчеру. Диспетчер смотрит сколько потоков уже работает на каждой машине, и пересылает пакет на копм с мин количеством потоков. Та машина их обрабатывает(долго), и отсылает обратно диспетчеру. А диспетчер уже обратно клиенту. Qt у меня 3.3.3. Сеть может состоять как Windows, так и Unix машин.
Записан
Sergeich
Гость
« Ответ #5 : Май 15, 2006, 15:32 »

Гмм... интересный тип вычислений... похоже на подбор паролей... или что-то в этом духе...
  Можно сделать так: Создаешь два приложения: сервер-диспетчер и клиент на машине в локалке.
  В сервер-диспетчер впаиваешь два QServerSocket`а - один для общения с клиентами, другой для связи с машинами в локалке. На каждый коннект создаешь QSocket.
  В локальном клиенте также юзаешь QSocket для соединения с сервером-диспетчером. Обработка пакета производится на клиенте в отдельной нитке(потоке), перед завершением нитки ( в конце run() ) посылаешь событие с результатами обработки какому-нибудь объекту( к-ый обрабатывает сообщения от сокета) , затем этот объект пишет результат в сокет.
  При диспетчеризации необходимо учитывать кол-во процов на компе и их мощность, а не только число потоков.
Записан
laeda
Гость
« Ответ #6 : Май 15, 2006, 16:06 »

спасибо, Sergeich! буду пробовать
Записан
Nikolay_S
Гость
« Ответ #7 : Май 16, 2006, 19:28 »

Посмотри ссылки с www.distributed.ru
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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