|
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
|
||||||||||||||||
Покритикуйте сервер21.09.2011, 23:17. Показов 4359. Ответов 38
Метки нет (Все метки)
Добрый день! Посмотрите и скажите пожалуйста возможные ошибки/недоработки/потенциальные косяки у класса mServer. Особенно интересуют потенциальные косяки при большом количестве подлючений. Надеюсь разобраться будет легко в том, что понаписано - если что пишите, а то сам забываю что, где написано
![]() Server.cpp - main file
mServer.h
mServer.cpp
0
|
||||||||||||||||
| 21.09.2011, 23:17 | |
|
Ответы с готовыми решениями:
38
Ввод/вывод. Покритикуйте код Покритикуйте - ка!:) Покритикуйте |
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 654
|
|
| 24.09.2011, 11:39 | |
|
niXman, А объясните пожалуйста, как coroutines/green-threads/прочая хрень может работать быстрее ну или тратить меньше ресурсов, чем простое однопоточное асинхронное приложение?
У меня как-то в голове не укладывается)
0
|
|
|
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
|
|
| 24.09.2011, 12:13 [ТС] | |
|
Скорее всего в итоге не работает быстрее, а задержки распределены по всем соединениям/операциями равномерно. Т.е в обычном асинхронном было: 10 клиентов ждут 1 секунду, и 10 ждут 5 секунд. А при coroutines/green-threads/прочая хрень все ждут по 3 секунды.(хотя может какие-то заморочки с распараллеливанием по ядрам есть)
1
|
|
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 654
|
||||
| 24.09.2011, 12:58 | ||||
|
0
|
||||
|
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
|
|
| 24.09.2011, 13:54 [ТС] | |
|
Лучше подождать более осведомленных, я тут в угадайку скорее играю
![]() Про 3 секунды не правильно сказал. Себе представляю так, одному клиенту сервер должен обдумать и отправить 3 независимых блока информации, а другому - 6. При последовательной обработке сервер вначале все отправляет первому, а потом принимается за второго. При сопрограммах отправляет вначале первому один блок, а второму два. Потом снова первому один, второму два и еще раз по кругу. В итоге второй клиент получил свои блоки хоть как в конце, но не скачками, а плавно. Может пример не корректный в практическом плане, но подобные оптимизации наверное больше зависят от специфики сервера и что от него ожидают клиенты.
0
|
|
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 654
|
|||
| 24.09.2011, 14:09 | |||
|
0
|
|||
|
|
|||||||
| 24.09.2011, 15:58 | |||||||
|
вот. читать в такой последовательности. http://blog.think-async.com/20... works.html http://blog.think-async.com/20... ealed.html http://blog.think-async.com/20... -code.html http://blog.think-async.com/20... tines.html Добавлено через 1 минуту Добавлено через 2 минуты Добавлено через 11 минут это собственно и есть описание принципов asio/libevent. другие не пользовал, но наверняка принцип тот же. Добавлено через 6 минут prik, не нужно все понимать буквально. говоря "кол-во которых может превышать 1000000 без затрат на переключение контекста." - имел ввиду то, что это возможность создать огромное кол-во потоков. но нужно понимать, что это не настоящий потоки который создает ОС, и потому нет переключений контекста. и такие потоки, я бы скорее назвал _псевдопотоками_. Добавлено через 5 минут и для венды нашел реализацию: http://www.codeproject.com/KB/... ntext.aspx
1
|
|||||||
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 654
|
||
| 24.09.2011, 16:32 | ||
|
Но я напрочь не понимаю, чем это лучше однопоточного решения или варианта с пулом процессов/потоков. Мой вопрос/просьба объяснить выделенное.
0
|
||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
||||
| 24.09.2011, 16:54 | ||||
|
_НО_ кроме скорости выполнения есть еще и скорость/удобство/цена разработки и если некую задачу _удобно_ решать в много_много_тысяч процессов, то ответ ИМХО очевиден. Добавлено через 7 минут
1
|
||||
|
|
||
| 24.09.2011, 22:38 | ||
|
первая ссылка, это как затравка. пример многопользовательского асинхронного эхо-сервера объемом меньше 100 строк. остальные ссылки, именно в таком порядке, описывают внутреннее устройство и дополняют теорией.
0
|
||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
||
| 25.09.2011, 10:34 | ||
|
Почему меня это интересует: выше я вам как пример показал набор POSIX функций для переключения контекста, как вы понимаете это действо специфично для разных платформ. Со ответсвенно и на линуксе и на фре они много раз оказывались не работоспособны на cpu отличных от x86. Вот мне и интересно как в библиотеке которую активно пихают в промышленный стандарт устроено сохранение и переключение контекста. Думал вы расскажите...
0
|
||
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 654
|
|
| 25.09.2011, 12:17 | |
|
На сколько я понимаю это плюсовое безобразие, там вообще нет никакого переключения контекста.
0
|
|
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
||
| 25.09.2011, 12:31 | ||
|
Угу, там не полная реализация того что называется Duff's device (по тому и stackless) со всеми ее ограничениями, но это пародия на сопрограмму. Я же не много про другое... Пару лет назад в рамках гугловских летних программ для студентов был проект реализовать полноценные сопрограммы для boost. Чем дело кончилось я не знаю, сейчас поискал в boost - их нет, хотел вот у Nixman'а узнать...
Добавлено через 2 минуты
1
|
||
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 654
|
|
| 26.09.2011, 14:02 | |
|
Если все-таки вернуться к началу обсуждения. Я так и не понял как лучше реализовать высокопроизводительный эхо сервер?
0
|
|
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|
| 26.09.2011, 15:27 | |
|
Самое "вкусное" к сожалению получиться платформозависимым.
Думаю что в не конкуренции окажется OpenBSD с ее SO_SPLICE. Линукс - либо splice() (ценой 2х лишних дескрипторов на каждый сокет) либо как все (плюс штраф за epoll_ctl()): не блокируемый асинхронный i/o и пул нитей (как уже и успел сказать Nixman)
1
|
|
|
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
|
|
| 29.09.2011, 19:17 [ТС] | |
|
Можно еще раз для особо медленных) - поправьте, если опять не так понял.
Должен быть один поток, в котором идет идет accept, recv от всех клиентов к примеру через epoll или тому подобное. Плюс пул потоков, который парсит, что пришло от клиентов, думает над ответом и отправляет им ответ. Или куда этот пул нитей?(просто вначале слова потоки это плохо, а потом пулл потоков)
0
|
|
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 654
|
|
| 29.09.2011, 19:32 | |
|
Вы говорите все еще об эхо-сервере или уже о чем-то другом?
0
|
|
|
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
|
||
| 29.09.2011, 20:06 [ТС] | ||
|
К примеру так
![]()
0
|
||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|
| 30.09.2011, 09:23 | |
|
KuKu, ваш вопрос на столько расплывчат (например лазил по БД), что ответить как-то более конкретно просто не возможно)
А так да, если вы нагрузите машину полностью (потоками или процессами не важно) будет хорошо. Вы помниться говорили про IRC, так посмотрите что есть и как работает. Ответьте на вопросы (не мне, себе) типа "а как оно держит 5к пользователей", "чем меня это не устраивает", "где бутылочное горлышко", "что с этим можно сделать" и тд. Не по теме: Я бы посоветовал посмотреть на другие языки..
1
|
|
| 30.09.2011, 09:23 | |
|
Покритикуйте Покритикуйте Покритикуйте код Покритикуйте код Покритикуйте код Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него.
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952
Инструкция внутри.
Сразу отвечу: А в PvP с ним. . .
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|