Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Алгоритмика

Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения

Ответ
 
Опции темы
Старый 31.03.2011, 18:35   #1
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Epica online

Сообщение от RokWeb Посмотреть сообщение
(1 поток - прием\отправка пакетов, 2 поток - обработка данных)
Однопоточный сервер плохо масштабируемый. Подумайте о использовании многопоточного или асинхронного сервера.
(Offline)
 
Ответить с цитированием
Старый 31.03.2011, 20:05   #2
ffinder
Дэвелопер
 
Аватар для ffinder
 
Регистрация: 10.09.2007
Сообщений: 1,442
Написано 793 полезных сообщений
(для 1,460 пользователей)
Ответ: Epica online

пахомыч, не соглашусь с твоим советом.
реально нужно 2-3 потока на ядро процессора, никак не больше.
(Offline)
 
Ответить с цитированием
Старый 31.03.2011, 20:08   #3
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Epica online

Сообщение от ffinder Посмотреть сообщение
пахомыч, не соглашусь с твоим советом.
реально нужно 2-3 потока на ядро процессора, никак не больше.
Чем это обосновано? Если например нужен проверяльщик timeout соединений? Его проще запустить отдельным потоком, не так ведь?
Плюс, ещё различные рутинные функции, лучше сделать потоком, если они нужны периодически, просто отправляется поток в сон, и выполняется рутина время от времени?
Я сам как бы не знаю, может это и имеет плохие стороны, но для меня очевидно удобно. Если есть тут "подводные камни", подскажите.
(Offline)
 
Ответить с цитированием
Старый 31.03.2011, 21:37   #4
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Epica online

Сообщение от ffinder Посмотреть сообщение
пахомыч, не соглашусь с твоим советом.
реально нужно 2-3 потока на ядро процессора, никак не больше.
И это говорит сторонник эрланга и гипермногопоточности?

Вот тут читал по реализации серверов: http://msdn.microsoft.com/ru-ru/library/dd335942.aspx
Вот что написано про однопоточную систему:
У этого подхода есть и другие недостатки, связанные с производительностью. После подключения примерно тысячи клиентов быстродействие метода Select значительно снижается. Это объясняется тем, что для определения того, доступны ли сокетам данные, ядро должно опросить каждый сокет.

Хотя эта методика позволяет подключить гораздо больше сокетов, чем модель, предполагающая создание нового потока для каждого запроса, она тоже плохо масштабируется. Вы должны поддерживать три списка, перебирая каждый из них для обслуживания запроса. С точки зрения использования потоков это более эффективно, но такой сервер гораздо медленнее реагирует на запросы, чем наш предыдущий вариант. Должен быть более эффективный способ работы с большим числом сокетов.
Относится конечно к дотнету, но не думаю что есть большие отличия по работе с сокетами под windows
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
HolyDel (01.04.2011), moka (31.03.2011)
Старый 31.03.2011, 22:41   #5
ffinder
Дэвелопер
 
Аватар для ffinder
 
Регистрация: 10.09.2007
Сообщений: 1,442
Написано 793 полезных сообщений
(для 1,460 пользователей)
Ответ: Epica online

Сообщение от pax Посмотреть сообщение
И это говорит сторонник эрланга и гипермногопоточности?
дело в том что VM эрланга:
1. создает 2 системных потока на ядро: один для ввода/вывода (сеть, диск), второй для логики
2. в эрланге процессы легковесные (легко запустить 100500 процессов, даже 300000 не проблема вовсе), в отличии от дотнета.
(Offline)
 
Ответить с цитированием
Старый 31.03.2011, 22:50   #6
ffinder
Дэвелопер
 
Аватар для ffinder
 
Регистрация: 10.09.2007
Сообщений: 1,442
Написано 793 полезных сообщений
(для 1,460 пользователей)
Ответ: Epica online

из статьи "про доднед и сокеты":
Как насчет масштабируемости?
Какую бы серверную модель я ни применял, на своем компьютере я не сумел создать более 4000 одновременных соединений или около того.
В этот момент в ответ на новые клиентские запросы начинали генерироваться довольно бесполезные сообщения об ошибках, извещавшие о нехватке места в буфере или о переполнении очередей.
Ясно, что этот предел неприемлем, если ваш сервер должен работать в какой-либо требовательной среде.
Почему же мы упираемся в этот потолок?
Оказывается, ограничивающим фактором является объем доступных ресурсов памяти, а именно, пул неподкачиваемой памяти (nonpaged pool).
Если процесс исчерпал свой пул этой памяти, создать новое соединение с сокетом не удастся.
как-то жалко смотрятся его потуги на фоне эрланка.
на эрланге поставлен рекорд с 1000000 (прописью: ОДИН МИЛЛИОН) одновременных TCP/IP соединений.
(Offline)
 
Ответить с цитированием
Старый 31.03.2011, 22:55   #7
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Epica online

Да и компилятор эрланга заточен под это. Но что делать при использовании не Erlang в качестве ЯП для программирования сетей?
Вообще в статье не сказано про то, какая машина у него, сколько памяти и т.д.
(Offline)
 
Ответить с цитированием
Старый 31.03.2011, 23:00   #8
ffinder
Дэвелопер
 
Аватар для ffinder
 
Регистрация: 10.09.2007
Сообщений: 1,442
Написано 793 полезных сообщений
(для 1,460 пользователей)
Ответ: Epica online

просьба модераторам вынести часть обсуждения в отдельную тему, и я с удовольствием продолжу.
тут вообще-то тема обсуждения онлайн-игры Epica Online
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо ffinder за это полезное сообщение:
baton4ik (31.03.2011), moka (01.04.2011), pax (31.03.2011)
Старый 31.03.2011, 23:35   #9
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,853 пользователей)
Ответ: Сетевая часть ММО игр

Продолжаем
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (31.03.2011)
Старый 31.03.2011, 23:48   #10
ffinder
Дэвелопер
 
Аватар для ffinder
 
Регистрация: 10.09.2007
Сообщений: 1,442
Написано 793 полезных сообщений
(для 1,460 пользователей)
Ответ: Сетевая часть ММО игр

Существует так называемая "проблема 10000 соединений"
Подробно описана вот здесь: http://www.kegel.com/c10k.html
Вот хорошее "содержание" (взято отсюда)
Рассуждения на тему проблемы обслуживания соединений от 10000 клиентов на одной машине. Разбираются такие технологии как select(), poll(), /dev/poll, kqueue, thread, nonblocking I/O, Realtime Signals, /dev/epoll, asynchronous I/O, ограничение числа filehandler и тредов, использование Zero-Copy, sendfile() и writev. Многочисленные примеры приложений реализующих вышеописанные механизмы.
Кратко резюмирую:

Подходы, в которых используется мультиплексирование ввода/вывода (select) имеют линейный рост времени обработки от числа подключений (чем больше - тем более медленно).

Подход вида "1 клиент - 1 поток" тоже нежизнеспособны, так как 1 системный поток требует 1 мб оперативной памяти. Легко посчитать сколько RAM необходимо для 100 000 подключений.

Есть только несколько технологий, которые позволяют преодолеть этот барьер.
Это kqueue/epoll (linux/freebsd), io completion port (windows server).
Для их работы хватает одного потока.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (31.03.2011)
Старый 31.03.2011, 23:55   #11
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Сетевая часть ММО игр

2ffinder Ты кстати обещал статью по эрлангу написать Я с удовольствием почитаю

UPD: ставлю Eclipce и erlide, буду иногда пробовать эрланг по мере возможности

Последний раз редактировалось pax, 01.04.2011 в 01:32.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nex (01.04.2011)
Старый 01.04.2011, 06:44   #12
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Сетевая часть ММО игр

я бы тоже почитал что нить про эрланг от булочника
(Offline)
 
Ответить с цитированием
Старый 01.04.2011, 10:08   #13
FDsagizi
Бывалый
 
Аватар для FDsagizi
 
Регистрация: 04.01.2008
Адрес: Казахстан \ Талдыкорган
Сообщений: 659
Написано 170 полезных сообщений
(для 509 пользователей)
Ответ: Сетевая часть ММО игр

Сообщение от ffinder Посмотреть сообщение

Есть только несколько технологий, которые позволяют преодолеть этот барьер.
Это kqueue/epoll (linux/freebsd), io completion port (windows server).
Для их работы хватает одного потока.
еще есть UDP.
__________________
Жизнь как говориться игра- делать игры моя профессия(с)

Программирование, это религия! Её нужно исповедовать.
(Offline)
 
Ответить с цитированием
Старый 01.04.2011, 12:05   #14
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,853 пользователей)
Ответ: Сетевая часть ММО игр

Сообщение от FDsagizi Посмотреть сообщение
еще есть UDP.
Udp - протокол. А мы говорим про технологии, которые этими самыми протоколами и управляют. Вернее работают через них, но хитро.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Старый 01.04.2011, 13:16   #15
ffinder
Дэвелопер
 
Аватар для ffinder
 
Регистрация: 10.09.2007
Сообщений: 1,442
Написано 793 полезных сообщений
(для 1,460 пользователей)
Ответ: Сетевая часть ММО игр

Сообщение от FDsagizi Посмотреть сообщение
еще есть UDP.
Да, UDP классный протокол. Для шутеров - видимо единственный вариант.
Но, неупорядоченная доставка пакетов и нет контроля доставки с последующей перепосылкой.
Но там где нужна гарантированная доставка пакетов: чаты, магазины (внутриигровые) - нужно либо изобретать tcp поверх udp, либо...
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 02:01.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com