![]() |
|
Модераторы: feodorv |
![]()
|
|
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
Привет. Прокоментируйте плиз. Я считаю, что с одной стороны при написании сервера нельзя выделять на каждое подключение по 1-2 потока, потому что это лишние ресурсы. С другой стороны нельзя писать всё в 1 потоке, потому что много многопроцессоров - не редкость.
Вывод: надо делать пул потоков, размером x*cpucount, у каждого потока есть свой массив сокетов, который передается в функцию select(). При этом слушающий сокет находится во всех массивах, а остальные сокеты каждый в своем, чтобы не пришлось синхронизировать. |
|||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
Завист на сколько клиентов расчитан сервер.
Если к примеру планируется клиентов 200-300, то можно без опасения делать один поток на одного клиента -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
||||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
Это не изврат, а самый простой способ работать с несколькими клиентами.
Во многих случаях он оправдан, а конкретно - когда не ожидается большого числа подключений. К томуже можно использовать пул потоков, не по количеству ядер, а по количеству предпологаемых клиентов. -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| boostcoder |
|
||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
потому и изврат.
он оправдан только тогда, когда хочется что-то по быстрому на###кодить с точки зрения архитектуры такого сервера - она изначально в тупике.
но это уже верх изврата из всех извратов |
||||||
|
|||||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
Если можно написать сервер выполняющий свои задачи за 1 день, зачем на него тратить 3 дня, кто оплатит 2 дня разницы ?
Если есть время экперементировать и добиться техже результатов, но более изящно - ваше право. -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
||||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
Я очень часто слышу критику многопоточных серверов, но на практике у меня с 2007 года работает многопоточный сервер, с числом клиентов около тысячи, проблем никаких нет.
И самое узкое место в нем - это работа с БД, которая тратит намного больше ресурсов чем переключение/создание потоков. -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
тысяча - это очень мало
|
|||
|
||||
| Олег2005 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
Одновременно? Количество виртуальной памяти, резервируемой для начального стека потока по умолчанию равно 0x100000 - 1048576 б + память для кучи + еще что..... Т.е. 100 клиентов - это примерно 100 Мб оперативки - только на системное обслуживание потоков 1000 клиентов - уже гигабайт...... А еще 1000 буферов приема/передачи в модуле TCP? Так что один клиент один поток и одновременно 1000 клиентов - накладно..... Потому эту модель и ругают..... Это сообщение отредактировал(а) Олег2005 - 2.11.2010, 23:14 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
||||
|
||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
Кстати у меня есть маленький однопоточный шлюз Bluetooth->TCP . Когда я его кодил, оказалось, что всё не так просто.
На каждое соединение пришлось выделять структурку ака job с полем state, счетчиками и 2 FIFO буферами. Пришлось добавлять switch(state)/case , чтобы резюмить прерванную передачу. Все эти структурки лежат в мапе, и когда select() возвращает готовые к работе сокеты, они ищутся в этой мапе |
|||
|
||||
| Олег2005 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
||||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |