Russian Qt Forum
Ноябрь 25, 2024, 08:34
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
Каково максимальное количество открытых портов?
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Каково максимальное количество открытых портов? (Прочитано 7107 раз)
virtual_root
Гость
Каково максимальное количество открытых портов?
«
:
Август 16, 2012, 22:48 »
Доброго времени суток! Возник такой вопрос:
Собираюсь писать сервер, который должен принимать соединения от клиентов. Каждому клиенту выделяется свой сокет, новый поток и новый порт по которому с ним будет происходить общение. Вопрос в следующем: предположим подключилось 5000 клиентов(такое возможно, но редко))). Как будет себя вести линуксовый сервер, позволит ли он открыть мне соединения по 5000 портам и обмениваться с ними данными?
Ребята, заранее извините, если вопрос глупый, но нужен ваш совет)
Записан
LisandreL
Птица говорун
Offline
Сообщений: 984
Надо улыбаться
Re: Каково максимальное количество открытых портов?
«
Ответ #1 :
Август 16, 2012, 23:46 »
Порты-то откроются, а вот 5000 потоков в одном приложение ОС вам вряд ли позволит запустить без дополнительных настроек.
А даже если и настроите, то всё равно в итоге ваше приложение будет заниматься только переключением потоков.
Так что лучше пересмотрите концепцию.
Записан
QCasper
Гость
Re: Каково максимальное количество открытых портов?
«
Ответ #2 :
Август 17, 2012, 01:20 »
На 5000 портов нужно немного потюнить лимиты, в этом случае ограничение по количеству открытых файловых дескриптов на процесс. Смотрите такие слова как ulimit -n и setrlimit.
Поток на каждого клиента заводить Вам не нужно совершенно точно. Проектируйте систему так, чтобы все тяжёлые операции выполнялись в отдельных потоках в количестве равном количеству ядер. А в основном потоке выполняйте постановку задач этим рабочим потокам.
Записан
ecspertiza
Супер
Offline
Сообщений: 1053
С уважением, мастер конфетного цеха!
Re: Каково максимальное количество открытых портов?
«
Ответ #3 :
Август 17, 2012, 08:54 »
А если уж хочется рассматривать концепцию сокеты в потоках, то уж совсем плохо на один сокет один поток, по хорошему 100 сокетов на поток, хотя можно ввести настроечу для вориации этой цыфры, что бы сравнить производительность.
Записан
QCasper
Гость
Re: Каково максимальное количество открытых портов?
«
Ответ #4 :
Август 17, 2012, 10:35 »
Цитата: ecspertiza от Август 17, 2012, 08:54
А если уж хочется рассматривать концепцию сокеты в потоках, то уж совсем плохо на один сокет один поток, по хорошему 100 сокетов на поток, хотя можно ввести настроечу для вориации этой цыфры, что бы сравнить производительность.
Абсолютно нет никакой связи количества сокетов с количеством потоков. Практика, логика и здравый смысл подсказывают, что исходить надо из количества потоков, которые процессор может одновременно обрабатывать. Если у процессора 4 ядра с HT, то потоков скорее всего будет около 8-ми. Любые попытки сильно завысить эту цифру ни к чему не приведут, а то и ухудшат дело.
Записан
ecspertiza
Супер
Offline
Сообщений: 1053
С уважением, мастер конфетного цеха!
Re: Каково максимальное количество открытых портов?
«
Ответ #5 :
Август 17, 2012, 11:24 »
нужно подумать как это можно было бы проверить, все же к цыфрам больше доверия
Может как вариант, открыть 1000 - 5000 сокетов с разным количеством потоков, и на каждый сокет послать по 100 сообщений, и посчитать среднее время отклика. Чет интересно стало, нужно бы попробовать вечерком
Записан
QCasper
Гость
Re: Каково максимальное количество открытых портов?
«
Ответ #6 :
Август 17, 2012, 13:52 »
Цитата: ecspertiza от Август 17, 2012, 11:24
нужно подумать как это можно было бы проверить, все же к цыфрам больше доверия
Может как вариант, открыть 1000 - 5000 сокетов с разным количеством потоков, и на каждый сокет послать по 100 сообщений, и посчитать среднее время отклика. Чет интересно стало, нужно бы попробовать вечерком
Ну так я же не просто так говорю, а потому что проверял уже. И за 100 сообщений Вы ничего не увидете
Такие бенчмарки обычно миллионами сообщений исчисляются
Вот ещё, посмотрите любопытную статью по теме:
http://blog.virtan.com/2012/07/million-rps-battle.html
Записан
LisandreL
Птица говорун
Offline
Сообщений: 984
Надо улыбаться
Re: Каково максимальное количество открытых портов?
«
Ответ #7 :
Август 17, 2012, 13:57 »
Цитата: QCasper от Август 17, 2012, 10:35
Практика, логика и здравый смысл подсказывают, что исходить надо из количества потоков, которые процессор может одновременно обрабатывать.
Не надо быть столь уж категоричным. Многое зависит от кода выполняемого в потоке. Если потоки спят / ждут в мьютексах / ждут ввода, то количество потоков равное количеству ядер не даст максимальной производительности.
Записан
xokc
Птица говорун
Offline
Сообщений: 976
Re: Каково максимальное количество открытых портов?
«
Ответ #8 :
Август 17, 2012, 14:51 »
Цитата: tiny developer от Август 16, 2012, 22:48
Каждому клиенту выделяется свой сокет, новый поток и новый порт по которому с ним будет происходить общение.
Не в плане критики, просто интересно самому: а зачем каждому клиенту свой собственный порт выделять?
Записан
Fat-Zer
Гость
Re: Каково максимальное количество открытых портов?
«
Ответ #9 :
Август 17, 2012, 15:45 »
меня, вот, терзают смутные сомнения, а не станет ли poll узким местом при таком количестве клиентов... и может и правда два/несколько потоков для приёма соединений будут быстрее?
Цитата: xokc от Август 17, 2012, 14:51
Не в плане критики, просто интересно самому: а зачем каждому клиенту свой собственный порт выделять?
видать, просто ТС оговорился...
Записан
ecspertiza
Супер
Offline
Сообщений: 1053
С уважением, мастер конфетного цеха!
Re: Каково максимальное количество открытых портов?
«
Ответ #10 :
Август 17, 2012, 15:54 »
Цитата: QCasper от Август 17, 2012, 13:52
Ну так я же не просто так говорю, а потому что проверял уже. И за 100 сообщений Вы ничего не увидете
Такие бенчмарки обычно миллионами сообщений исчисляются
Вот ещё, посмотрите любопытную статью по теме:
http://blog.virtan.com/2012/07/million-rps-battle.html
Любопытная статейка, если я все верно понял то nodejs не так уж и плох ))))
Записан
QCasper
Гость
Re: Каково максимальное количество открытых портов?
«
Ответ #11 :
Август 17, 2012, 18:59 »
Цитата: LisandreL от Август 17, 2012, 13:57
Если потоки спят / ждут в мьютексах / ждут ввода, то количество потоков равное количеству ядер не даст максимальной производительности.
Если у Вас потоки спят, Вы не используете cpu на всю мощь, это либо проблемы в программе, либо нагрузка недостаточно велика, поэтому о производительности тут вообще можно не говорить. Если висят на локах так долго, что нужно ещё потоки добавлять, то нужно что-то делать с такими локами.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...