Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рецепт правильного сервера с т. зрения потоков 
V
    Опции темы
leniviy
Дата 1.11.2010, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 552
Регистрация: 8.2.2003
Где: Спб

Репутация: нет
Всего: 5



Привет. Прокоментируйте плиз. Я считаю, что с одной стороны при написании сервера нельзя выделять на каждое подключение по 1-2 потока, потому что это лишние ресурсы. С другой стороны нельзя писать всё в 1 потоке, потому что много многопроцессоров - не редкость.
Вывод: надо делать пул потоков, размером x*cpucount, у каждого потока есть свой массив сокетов, который передается в функцию select(). При этом слушающий сокет находится во всех массивах, а остальные сокеты каждый в своем, чтобы не пришлось синхронизировать.

PM MAIL   Вверх
Artemon
Дата 1.11.2010, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 1
Всего: 20



Завист на сколько клиентов расчитан сервер.

Если к примеру планируется клиентов 200-300, то можно без опасения делать один поток на одного клиента


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
boostcoder
Дата 1.11.2010, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 13
Всего: 110



leniviy, я всегда использую пул потоков. где кол-во потоков равно кол-ву ядер. проблем не замечал.

Цитата(Artemon @  1.11.2010,  18:08 Найти цитируемый пост)
Если к примеру планируется клиентов 200-300, то можно без опасения делать один поток на одного клиента 

к чему такой изврат?
PM WWW   Вверх
Artemon
Дата 1.11.2010, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 1
Всего: 20



Это не изврат, а самый простой способ работать с несколькими клиентами.

Во многих случаях он оправдан, а конкретно - когда не ожидается большого числа подключений.

К томуже можно использовать пул потоков, не по количеству ядер, а по количеству предпологаемых клиентов.


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
boostcoder
Дата 1.11.2010, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 13
Всего: 110



Цитата(Artemon @  1.11.2010,  20:42 Найти цитируемый пост)
Это не изврат, а самый простой способ работать с несколькими клиентами.

потому и изврат.

Цитата(Artemon @  1.11.2010,  20:42 Найти цитируемый пост)
Во многих случаях он оправдан, а конкретно - когда не ожидается большого числа подключений.

он оправдан только тогда, когда хочется что-то по быстрому на###кодить smile 
с точки зрения архитектуры такого сервера - она изначально в тупике.

Цитата(Artemon @  1.11.2010,  20:42 Найти цитируемый пост)
К томуже можно использовать пул потоков, не по количеству ядер, а по количеству предпологаемых клиентов.

но это уже верх изврата из всех извратов smile 
PM WWW   Вверх
Artemon
Дата 1.11.2010, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 1
Всего: 20



Если можно написать сервер выполняющий свои задачи за 1 день, зачем на него тратить 3 дня, кто оплатит 2 дня разницы ?

Если есть время экперементировать и добиться техже результатов, но более изящно - ваше право.





--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
boostcoder
Дата 1.11.2010, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 13
Всего: 110



Цитата(Artemon @  1.11.2010,  20:56 Найти цитируемый пост)
Если можно написать сервер выполняющий свои задачи за 1 день, зачем на него тратить 3 дня, кто оплатит 2 дня разницы ?

меня бы совесть загрызла за то, что написал такое Гэ..

Добавлено через 4 минуты и 58 секунд
тема уже закрыта, оказывается smile 
PM WWW   Вверх
Artemon
Дата 2.11.2010, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 1
Всего: 20



Я очень часто слышу критику многопоточных серверов, но на практике у меня с 2007 года работает многопоточный сервер, с числом клиентов около тысячи, проблем никаких нет.

И самое узкое место в нем - это работа с БД, которая тратит намного больше ресурсов чем переключение/создание потоков.


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
leniviy
Дата 2.11.2010, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 552
Регистрация: 8.2.2003
Где: Спб

Репутация: нет
Всего: 5



тысяча - это очень мало
PM MAIL   Вверх
Олег2005
Дата 2.11.2010, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

Репутация: 6
Всего: 11



Цитата(Artemon @  2.11.2010,  07:40 Найти цитируемый пост)
 но на практике у меня с 2007 года работает многопоточный сервер, с числом клиентов около тысячи, проблем никаких нет.

Одновременно?
Количество виртуальной памяти, резервируемой для начального стека потока по умолчанию равно 0x100000 - 1048576 б + память для кучи + еще что.....
Т.е. 100 клиентов - это примерно 100 Мб оперативки - только на системное обслуживание потоков
1000 клиентов - уже гигабайт......
А еще 1000 буферов приема/передачи в модуле TCP?
Так что один клиент один поток и одновременно 1000 клиентов - накладно.....
Потому эту модель и ругают.....



Это сообщение отредактировал(а) Олег2005 - 2.11.2010, 23:14
PM MAIL WWW MSN   Вверх
boostcoder
Дата 2.11.2010, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 13
Всего: 110



Цитата(Олег2005 @  2.11.2010,  20:40 Найти цитируемый пост)
1000 клиентов - уже терабайт......

гигабайт
PM WWW   Вверх
leniviy
Дата 2.11.2010, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 552
Регистрация: 8.2.2003
Где: Спб

Репутация: нет
Всего: 5



Кстати у меня есть маленький однопоточный шлюз Bluetooth->TCP . Когда я его кодил, оказалось, что всё не так просто.
На каждое соединение пришлось выделять структурку ака job с полем state, счетчиками и 2 FIFO буферами.
Пришлось добавлять switch(state)/case , чтобы резюмить прерванную передачу.
Все эти структурки лежат в мапе, и когда select() возвращает готовые к работе сокеты, они ищутся в этой мапе
PM MAIL   Вверх
Олег2005
Дата 2.11.2010, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

Репутация: 6
Всего: 11



Цитата(boostcoder @  2.11.2010,  20:39 Найти цитируемый пост)
гигабайт 

Пардон.
Ошибся smile 
PM MAIL WWW MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0548 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.