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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Стек или потоки?!  (Прочитано 9921 раз)
Xeon
Гость
« : Октябрь 18, 2009, 17:48 »

Здравствуйте!
Мне интересен такой вопрос: как лучше организовать серверное приложение (С++), у которого, возможно, много клиентов, с помощью стека или потоков? Т.е. как организовать соединения?
Записан
SABROG
Гость
« Ответ #1 : Октябрь 18, 2009, 18:53 »

Под стеком подразумевается бесконечный цикл в одном потоке, который обрабатывает все соединения?

Я бы наверно вынес в отдельные потоки. В зависимости от мощности системы ограничил бы количество потоков скажем до 50 и разделил количество клиентов на количество потоков. Можно например повесить на один поток 50 клиентов, при подключении нового клиента создается еще один поток и новые клиенты добавляются уже в него. Возможно как-то перемещал бы клиентов между потоками, чтобы можно было освободить ресурсы. Типа дефрагментация.
Записан
Xeon
Гость
« Ответ #2 : Октябрь 18, 2009, 19:05 »

SABROG да именно так. Улыбающийся
А не можешь подсказать какие плюсы и минусы у кахдого из способов, или где можно почитать об этом?
Записан
BRE
Гость
« Ответ #3 : Октябрь 18, 2009, 19:10 »

А не можешь подсказать какие плюсы и минусы у кахдого из способов, или где можно почитать об этом?
http://www.opennet.ru/base/dev/server_way.txt.html
Записан
Xeon
Гость
« Ответ #4 : Октябрь 18, 2009, 19:39 »

BRE Спасибо!
Может кто посоветует хорошую книжку по написанию сетевых приложений?! Улыбающийся
Записан
BRE
Гость
« Ответ #5 : Октябрь 18, 2009, 19:52 »

Может кто посоветует хорошую книжку по написанию сетевых приложений?! Улыбающийся
Классика:
У. Р. Стивенс, Б. Феннер, Э. М. Рудофф
UNIX. Разработка сетевых приложений

Записан
Xeon
Гость
« Ответ #6 : Октябрь 18, 2009, 19:56 »

BRE, а под Windows чтонить посоветуешь? Улыбающийся
Записан
BRE
Гость
« Ответ #7 : Октябрь 18, 2009, 19:58 »

BRE, а под Windows чтонить посоветуешь? Улыбающийся
Нет.  Подмигивающий  Смеющийся
Записан
Xeon
Гость
« Ответ #8 : Октябрь 18, 2009, 20:00 »

BRE, жаль Улыбающийся
А какой из способов написания сервера тебе больше по душе?
Записан
BRE
Гость
« Ответ #9 : Октябрь 18, 2009, 20:02 »

А какой из способов написания сервера тебе больше по душе?
А какое количество клиентов планируется обслуживать одновременно?
Записан
Xeon
Гость
« Ответ #10 : Октябрь 18, 2009, 20:21 »

Планируется больше 1000, а то и 2000.
Записан
Rcus
Гость
« Ответ #11 : Октябрь 18, 2009, 20:28 »

А почему бы не использовать Boost::Asio? Она внутри использует нативные средства (kqueue|/dev/poll|epoll|whatever). Имеет удобный API для асинхронного чтения/записи. И масштабируется без особых проблем при помощи пула потоков.
Записан
BRE
Гость
« Ответ #12 : Октябрь 18, 2009, 20:30 »

Планируется больше 1000, а то и 2000.
Ну это уже не мало. Не решусь, что то советовать, тебе самому перед началом разработкой необходимо хорошо представлять что ты делаешь.

Вот глянь еще статьи:
http://www.kegel.com/c10k.html (!!!)
http://greenmice.info/ru/node/115 (здесь интересна первая теоретическая часть)
http://sysoev.ru/nginx/ (сайт Игоря Сысоева автора nginx )
+ посмотри еще в нете
Записан
BRE
Гость
« Ответ #13 : Октябрь 18, 2009, 20:31 »

А почему бы не использовать Boost::Asio? Она внутри использует нативные средства (kqueue|/dev/poll|epoll|whatever). Имеет удобный API для асинхронного чтения/записи. И масштабируется без особых проблем при помощи пула потоков.
+ еще бы посоветовал посмотреть на библиотеку ACE.
Записан
Xeon
Гость
« Ответ #14 : Октябрь 18, 2009, 20:32 »

Rcus, а можно поподробней или ссылочку где почитать? Улыбающийся
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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