Название: Клиент-сервер Отправлено: blood_shadow от Август 28, 2011, 17:56 Добрый день,
стоит задача смоделировать взаимодействие клиентов (до 10) с сервером, короче суть такова: клиенты и сервера находятся в разных потоках, клиенты посылают данные в очередь у каждого такого запроса имеется приоритет, сервер изымает данные с очереди начиная с найвысшего приоритета Вроде бы я все это реализовал, но процессор грузится почти на 100% я так понимаю это из-за бесконечных циклов, как я понимаю необходимо добавить в каждый поток sleep(), но тут вопрос - какое значение необходимо передать этой ф-ции чтобы сервер не хватал с очереди один пакет, но и чтобы клиенты не успели забить очень много пакетов до того как сервер начнет их обрабатывать? Или это все методом подбора, но как тогда с переносом программы на другую машину? Спасибо Название: Re: Клиент-сервер Отправлено: merke от Август 29, 2011, 06:09 как вариант используй таймер, вместо бесконечного цикла.
Название: Re: Клиент-сервер Отправлено: ddrtn от Август 29, 2011, 08:45 Как реализованы потоки? если с помощью QThread, то приблизительная схема примерно такова:
Код: class MyThread: public QThread; Бесконечный цикл в обработчике не нужен. Для опроса очереди можно использовать таймер с постоянным или плавающим интервалом опроса. Однако, на мой взгляд лучше заставлять обработчики ловить сообщения от менеджера очереди о приходе данных. Плюсы этого подхода - отсутствие необходимости периодического просмотра очереди. как следствие - сокращение постоянной нагрузки на проц. Минусы - нужно реализовать менеджер очереди; нужно более сложное управление приоритетами;более сложная архитектура приложения; Название: Re: Клиент-сервер Отправлено: blood_shadow от Август 29, 2011, 18:49 как вариант используй таймер, вместо бесконечного цикла. понял сделаю так:клиенты с интервалом в 1 сек. шлют пакеты, сервер с интервалом 0.5 сек вытягивает их с очереди вот такой вопрос - понятно что память на компе не "резиновая" и когда нибудь закончится, например про ту же очередь (клиенты заполнят ее быстрее чем сервер будет тянуть пакеты), как лучше поступить в данном случае? или просто сделать ограничение на 256 пакетов для очереди, по достижении которого усыплять нити клиентов? Название: Re: Клиент-сервер Отправлено: merke от Август 29, 2011, 18:50 Это не тру, в худшем случае просто слетишь в файл подкачки)
Название: Re: Клиент-сервер Отправлено: Igors от Август 29, 2011, 19:41 Вроде бы я все это реализовал, но процессор грузится почти на 100% я так понимаю это из-за бесконечных циклов, как я понимаю необходимо добавить в каждый поток sleep(), Ну sleep это никак не решение проблемы - нитки должны ждать на блокировках, или на атомарных локах.Название: Re: Клиент-сервер Отправлено: blood_shadow от Август 29, 2011, 21:00 Это не тру, в худшем случае просто слетишь в файл подкачки) а чего не тру? 256 сильно много?Название: Re: Клиент-сервер Отправлено: merke от Август 30, 2011, 06:29 смотря какого размера пакет
Название: Re: Клиент-сервер Отправлено: lesav от Август 30, 2011, 17:51 ... но процессор грузится почти на 100% ... А попробуйте скачать ВоркСпэйс с проектом Client Server (http://qnx.org.ru/forum/index.php?topic=6513.msg54000#msg54000) В проекте Client Server была заложена мнопоточность со стороны сервера Для тестирование запускал очень много клиентов (пока не уперся в ограничения Windows 2003 Server на количество tcp соединения) Мгу сказать, что сервер не грузил Сервер ЗЫ Извините за тафталогию. |