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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сокеты для большого сервера 
:(
    Опции темы
Anton Vatchenko
Дата 21.5.2010, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Итак, имеем около 5 тысяч клиентов, которые висят на сервере через TCP. Изначально все было построено на модели 1 клиент - 1 поток, что уже не целесообразно. Поэтому хотелось бы узнать как на крупных серверах решают проблему:
1. Какая-то супер библиотека.
2. Асинхронные сокеты через select и затем перебор всех активных соединений if (FD_ISSET(..., ...)). Не так уж сложно перебирать 5 тысяч элементов и проверять установлен ли флаг, но это приходится делать без остановки - большой поток данных. Да и необходимо другие задачи выполнять.
3. Какая-то возможность получить только те соединения, на которых появились данные.


--------------------
user posted image
PM MAIL   Вверх
boostcoder
Дата 22.5.2010, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



асинхронные сокеты + epoll()

PM WWW   Вверх
MAKCim
Дата 22.5.2010, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



не путайте понятия "асинхронный" и мультиплексируемый ;)
по сабжу C10k


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Anton Vatchenko
Дата 22.5.2010, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Статья хорошая, но в ней ни к одному идеальному варианту автор не приходит. Насколько я понимаю, есть хорошие способы, чтобы решить проблему, и сделать код переносимым, но зачем описывать все способы?


--------------------
user posted image
PM MAIL   Вверх
Enelar
Дата 25.6.2010, 01:51 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



однопоточное приложение всегда быстрее многопоточного.
в структуре fd_set хранится набор битов где номер бита равен номеру сокета
(4 бит равен 1, значит в сокете 4 пришло сообщение)
Если проверять на наличие сообщений по 4 байта, если есть то в этих 4 по 2, по одному потом по битам.
Выдерживает нагрузку 10к без проблем и еще куча всего остального вертится.

Это сообщение отредактировал(а) Enelar - 25.6.2010, 06:11
PM MAIL   Вверх
Alca
Дата 25.6.2010, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

однопоточное приложение всегда быстрее многопоточного.

Серьезно?


--------------------
PM WWW ICQ Skype Jabber   Вверх
borisbn
Дата 25.6.2010, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Enelar @  25.6.2010,  01:51 Найти цитируемый пост)
однопоточное приложение всегда быстрее многопоточного.

а в Intel'е не знают. делают 8-ми, 16-ти ядерные процессоры ...


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
MAKCim
Дата 25.6.2010, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



смотря как масштабируется задача
имхо, на мой взгляд, самая масштабируемая стратегия - 1 поток, слушающий сокет и N рабочих потоков каждый со своим epoll


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
REZiaMIX
Дата 25.6.2010, 17:13 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



libevent, boost::asio
;)


--------------------
user posted image
PM MAIL   Вверх
MAKCim
Дата 25.6.2010, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



REZiaMIX, 
это инструменты, тут же речь про стратегии


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Enelar
Дата 26.6.2010, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я говорил именно про данную задачу.
PM MAIL   Вверх
REZiaMIX
Дата 29.6.2010, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(MAKCim @ 25.6.2010,  17:23)
REZiaMIX, 
это инструменты, тут же речь про стратегии

Цитата

1. Какая-то супер библиотека.



--------------------
user posted image
PM MAIL   Вверх
kometa_75
Дата 17.2.2011, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(borisbn @ 25.6.2010,  10:42)
Цитата(Enelar @  25.6.2010,  01:51 Найти цитируемый пост)
однопоточное приложение всегда быстрее многопоточного.

а в Intel'е не знают. делают 8-ми, 16-ти ядерные процессоры ...

Извиняюсь за некропостинг, но как многоядерная архитекура "ускоряет" многопоточное приложение? Имеется в виду определённое автоматическое масштабирование системой, компилятором(нужное подчеркнуть) потоков на CPU core?
ЗЫ. Говорю именно про потоки, а не нити, процессы и т.п. И да, не подразумевается использование никакого API для параллельных вычислений(OpenMP etc.)
PM MAIL   Вверх
MAKCim
Дата 17.2.2011, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(kometa_75 @  17.2.2011,  15:44 Найти цитируемый пост)
но как многоядерная архитекура "ускоряет" многопоточное приложение?

каждый поток может работать параллельно с другими занимая одно из ядер cpu
т. е. если cpu 16-ти ядерный, то, упрощая, 16 потоков будут работать параллельно


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
xvr
Дата 17.2.2011, 16:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(kometa_75 @  17.2.2011,  15:44 Найти цитируемый пост)
ЗЫ. Говорю именно про потоки, а не нити, процессы и т.п.

А кто же тогда 'потоки'? ('поток', он же thread, он же 'нить')

PM MAIL   Вверх
kometa_75
Дата 17.2.2011, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(xvr @ 17.2.2011,  16:36)
Цитата(kometa_75 @  17.2.2011,  15:44 Найти цитируемый пост)
ЗЫ. Говорю именно про потоки, а не нити, процессы и т.п.

А кто же тогда 'потоки'? ('поток', он же thread, он же 'нить')

В винде fiber и thread имеют отличия. В *nix действительно, разницы нет. Однако мой вопрос был задан отнюдь не в контексте какой-либо конкретной ОС. 
Повторюсь, кто и где встречал в спецификации от hardware/software вендоров что-нибудь типа one thread-one core? Меня серьёзно интересует эта тема, ничего конкретного я пока сам не нарыл. Восновном "должно быть лучше", "теоретически", "опыты показали"...
PM MAIL   Вверх
xvr
Дата 17.2.2011, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(kometa_75 @  17.2.2011,  16:50 Найти цитируемый пост)
Повторюсь, кто и где встречал в спецификации от hardware/software вендоров что-нибудь типа one thread-one core?
Нету таких пока. Вендоры нацелились на многокоровость, т.к. на пути повышения тактовой частоты и архитектурного ускорения одно-потокового кода уже практически уперлись в стену smile Дальнейшее увеличение производительности потребует каких то революционных изменений в архитектуре (или вообще новых архитектур), а вот этого то как раз вендоры делать и не хотят, т.к. уже наелись 'революций' (безуспешных)  smile 

PM MAIL   Вверх
kometa_75
Дата 17.2.2011, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(xvr @ 17.2.2011,  16:56)
Цитата(kometa_75 @  17.2.2011,  16:50 Найти цитируемый пост)
Повторюсь, кто и где встречал в спецификации от hardware/software вендоров что-нибудь типа one thread-one core?
Нету таких пока. Вендоры нацелились на многокоровость, т.к. на пути повышения тактовой частоты и архитектурного ускорения одно-потокового кода уже практически уперлись в стену smile Дальнейшее увеличение производительности потребует каких то революционных изменений в архитектуре (или вообще новых архитектур), а вот этого то как раз вендоры делать и не хотят, т.к. уже наелись 'революций' (безуспешных)  smile

Ну я собственно что хотел сказать своим вопросом. Встречался неоднократно с мнением, что якобы многопоточное приложение более пропорционально масштабируется на многоядерной(НЕ многопроцессорной!!!) системе, нежели однопоточное.
Ради интереса провёл много тестов, и не нашёл подтверждения этому предположению. Скажем так, всё было скорее всего наоборот.
Понятное дело, что потоки нужны. Тот же epoll крайне рекомендуется делать в отдельном потоке. Как уже писали в этой теме, правильно надо масштабировать задачи. А то что чрезмерное увлечение(применять всегда и везде где только можно) потоками - неистребимое зло, сказано было уже давно и неоднократно.
PM MAIL   Вверх
xvr
Дата 17.2.2011, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(kometa_75 @ 17.2.2011,  17:13)
Ну я собственно что хотел сказать своим вопросом. Встречался неоднократно с мнением, что якобы многопоточное приложение более пропорционально масштабируется на многоядерной(НЕ многопроцессорной!!!) системе, нежели однопоточное.

Разницы между многоядерной (действительно многоядерной, а не просто HyperThread'инговой!) и многопроцессорной системой быть не должно. Разница между ними чисто количественная (типа размеров и принадлежностей кэшей, задержки на их синхронизацию и пр). И настоящее многопоточное приложение действительно будет масштабироваться.
Цитата

Ради интереса провёл много тестов, и не нашёл подтверждения этому предположению. 
Каких тестов? Приложение должно быть не просто многопоточным, но все его  потоки должны одновременно что то вычислять. Таких задач не так уж и много, а в быту их вообще нет. В основном это всякие CAD'ы, связанные с матричными (и подобными) расчетами. Например - обработка видео, трассировка плат и FPGA, тепловые расчеты, механические расчеты, 3D моделирование.

Цитата

Понятное дело, что потоки нужны. Тот же epoll крайне рекомендуется делать в отдельном потоке. 
Это не те потоки, где будет заметен выигрыш от многокоровости/многопроцессорности. Потоки должны работать, а не ждать

Цитата

Как уже писали в этой теме, правильно надо масштабировать задачи. А то что чрезмерное увлечение(применять всегда и везде где только можно) потоками - неистребимое зло, сказано было уже давно и неоднократно.
Угу, несомненно. 
PM MAIL   Вверх
kometa_75
Дата 18.2.2011, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Разницы между многоядерной (действительно многоядерной, а не просто HyperThread'инговой!) и многопроцессорной системой быть не должно.

Позволю не согласиться. В многопроцессорной конфигурации однопоточное приложение не будет гарантировано задействовать все процессоры. Многопоточное - также. Для этого и созданы специальное API, компиляторы. С многоядерным процессором немного иначе. Тут нельзя однозначно определить как и по какому принципу нагрузка будет масштабирована на ядра.

Цитата

И настоящее многопоточное приложение действительно будет масштабироваться.

Оно будет масштабироваться примерно также как и однопоточное. Хотя возможны вариации. 

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

Что подразумевается под "в быту"? Вот реальный пример. Сервер для онлайн-игры. Имеется множество равнозначных игровых сессий. В каждой просчёт игрового своего мини-мира, физика, логика и т.п. Каждая сессия активна, т.е. не ждёт, а что-то вычисляет. Второй вариант, имеется совокупность зон-локаций. В каждой выполняется просчёт мира, мобов и т.д. Как видите, очень напрашивается идея организовать каждую сущность в отдельном потоке. 
Не буду приводить примеры из области параллельных вычислений. Их там достаточно. И классическая многопоточность там не используется.

Цитата
Это не те потоки, где будет заметен выигрыш от многокоровости/многопроцессорности. Потоки должны работать, а не ждать

Выигрыш от потоков, на мой взгляд, это исключительно выигрыш за счёт более рационального использования effective work time. Т.е. в основном это параллельное выполнение какой-либо задачи со своими нюансами основанными на времени выполнения. Сам поток никаким образом не "ускорит" программу, и отличное(от однопотоного приложения) масштабирование потоков на разные ядра-процессоры, как мне кажется, это необоснованный миф.

PM MAIL   Вверх
borisbn
Дата 18.2.2011, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(kometa_75 @  18.2.2011,  11:26 Найти цитируемый пост)
В многопроцессорной конфигурации однопоточное приложение не будет гарантировано задействовать все процессоры

пожалуй, соглашусь

Цитата(kometa_75 @  18.2.2011,  11:26 Найти цитируемый пост)
Многопоточное - также. Для этого и созданы специальное API, компиляторы

а вот тут... в linux, честно говоря, не знаю, а windows сама распределяет нагрузку по процессорам/ядрам, так что пруф-линк, пожалуйста. 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
xvr
Дата 18.2.2011, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(kometa_75 @ 18.2.2011,  11:26)
Цитата

Разницы между многоядерной (действительно многоядерной, а не просто HyperThread'инговой!) и многопроцессорной системой быть не должно.

Позволю не согласиться. В многопроцессорной конфигурации однопоточное приложение не будет гарантировано задействовать все процессоры. 

Я бы даже сказал - гарантированно не будет
Цитата

Многопоточное - также. 
Будет
Цитата

Для этого и созданы специальное API, компиляторы. 
API - да, а компиляторы можно и обычные использовать. А можно и специальные расширения использовать. 
Цитата

С многоядерным процессором немного иначе. Тут нельзя однозначно определить как и по какому принципу нагрузка будет масштабирована на ядра.
С точки зрения API да и вообще доступной для программиста архитектуры системы система с многоядерным процессором НИЧЕМ НЕ ОТЛИЧАЕТСЯ от многопроцессорной системы. 
Цитата

Цитата

И настоящее многопоточное приложение действительно будет масштабироваться.

Оно будет масштабироваться примерно также как и однопоточное. Хотя возможны вариации. 
Без вариантов. Должно масштабироваться. Иначе оно криво написано  smile 
Цитата

Сервер для онлайн-игры. Имеется множество равнозначных игровых сессий. В каждой просчёт игрового своего мини-мира, физика, логика и т.п. Каждая сессия активна, т.е. не ждёт, а что-то вычисляет. 
При современных мощностях процессоров сессии скорее всего будут ждать действий игроков. Вычисления будут занимать немного времени.
Цитата

Второй вариант, имеется совокупность зон-локаций. В каждой выполняется просчёт мира, мобов и т.д.
Аналогично.
Есть простой тест - берем однокоровый/однопроцессорный вариант, запускаем тестируемую прогу. Смотрим загрузку процессора - если она не 100%, то распараллеливать тут нечего.
Потом берем многокоровый/многопроцессорный сервер. Запускаем, смотрим загрузку - если она не 100% по всем корам, то налицо недоиспользование ресурсов, т.е. криво распараллелено (либо нужна большая нагрузка - больше клиентов или подобное).
Если все ок, сравниваем скорость работы. Должна повысится пропорционально количеству коров/процессоров
Цитата

Не буду приводить примеры из области параллельных вычислений. Их там достаточно. И классическая многопоточность там не используется.
Дык, а кто не дает ее использовать? Разумеется, что бы программа работала быстрее на многокоровой машине она должна быть грамотно написана. Простое однопоточное приложение не станет работать быстрее на многокоровой машине.

Цитата

Выигрыш от потоков, на мой взгляд, это исключительно выигрыш за счёт более рационального использования effective work time. Т.е. в основном это параллельное выполнение какой-либо задачи со своими нюансами основанными на времени выполнения. 
Это немного другой аспект использования потоков - для упрощения логической структуры программы. Ускорения здесь не будет
Цитата

Сам поток никаким образом не "ускорит" программу, 
В общем да.
Цитата

и отличное(от однопотоного приложения) масштабирование потоков на разные ядра-процессоры, как мне кажется, это необоснованный миф.
А мне кажется, что вы не в курсе, что такое многоядерные процессоры  smile По сути это несколько независимых процессоров, собранных на одном кристалле. И на них потоки отличным образом ложатся. 
Термин 'масштабируются потоки' тут несколько неуместен, масштабировать можно все приложение целиком, путем создания в нем стольких потоков, сколько есть процессоров. Тогда будет достигнута максимальная производительность и загрузка аппаратуры.

PM MAIL   Вверх
MAKCim
Дата 18.2.2011, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(xvr @  18.2.2011,  14:04 Найти цитируемый пост)
С точки зрения API да и вообще доступной для программиста архитектуры системы система с многоядерным процессором НИЧЕМ НЕ ОТЛИЧАЕТСЯ от многопроцессорной системы. 

я даже больше скажу
на программном уровне даже на уровне ядра будет обычное представление cpu0, cpu1, cpu2, ...
и не суть важно, cpu0 - это процессор или физическое ядро, или логическое ядро (hyper threading)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




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


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

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