Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Несколько вопросов по моделям ввода-вывода


Автор: Runcorn 16.2.2012, 02:11
Всем привет.
У меня есть пару общих вопросов по моделям ввода-вывода при работе с сетью на стороне сервера.

Модель, при которой на один клиент создается один поток, является неэффективной, так как происходят слишком большие и ненужные расходы ресурсов системы. Обычно создают пул потоков для этого дела. Мне интересно, как реализовать правильный пул потоков? Я знаю, что очень часто используются порты завершения для работы с пулом. Почему именно порты завершения?
Еще такой вопрос: можно ли связать пул потоков с ассинхронными сокетами, основанными на событиях? Также, являются ли сокеты, основанные на событиях, лучшими за сокеты, основанные на сообщениях?

Меня пока что не интересуют высокоуровневые классы для работы с сетью. Я хочу разобраться на более низком уровне.

Заранее всем спасибо за ответы.

Автор: boostcoder 16.2.2012, 03:48
все очень расплывчато %)

читать темы полностью, и именно в этом порядке, и переходить по ссылкам:
http://forum.vingrad.ru/forum/topic-341333/view-all.html
http://forum.vingrad.ru/forum/topic-342722/kw-disruptor.html

как закончишь - задавай вопросы по существу, пожалуйста.

Автор: Олег2005 16.2.2012, 16:14
Цитата(Runcorn @  16.2.2012,  01:11 Найти цитируемый пост)
Я знаю, что очень часто используются порты завершения для работы с пулом. Почему именно порты завершения?

Порты завершения заточены под многопроцессорные или многоядерные системы.
Это их первое преимущество.
Второе - с одним портом завершения можно связать произвольное количество клиентов.
Третье - один порт завершения может обрабатываться произвольным количеством рабочих потоков. Причем можно их создать несколько - и пока ненужные потоки повесить в спящий режим. Как только нагрузка увеличивается - автоматически подключаются спящие.
Более эффективном модели пока просто нет.

Автор: newbee 16.2.2012, 16:29
Порт завершения - это что-то типа http://linux.die.net/man/4/epoll?

Автор: Runcorn 18.2.2012, 12:53
Цитата(boostcoder @ 16.2.2012,  03:48)
все очень расплывчато %)

читать темы полностью, и именно в этом порядке, и переходить по ссылкам:
http://forum.vingrad.ru/forum/topic-341333/view-all.html
http://forum.vingrad.ru/forum/topic-342722/kw-disruptor.html

как закончишь - задавай вопросы по существу, пожалуйста.

Я написал вопросы, которые меня интересуют в первом посте.
Первую ссылку уже читал раньше, вторую еще прочитаю.
Олег2005, спасибо за ответ.

Кто нибудь читал хорошие статьи по портам завершения? Скиньте, если можете. Язык C/C++, но не принципиально.

Автор: 12usver12 18.2.2012, 14:00
Цитата

Кто нибудь читал хорошие статьи по портам завершения? Скиньте, если можете. Язык C/C++, но не принципиально.

так в чем проблема ? в инете очень много статей и примеров по портам завершения. Если вы не делаете игровой сервер на миллион пользователей - то попроще каркас у сервера будет через Completion Routines(Callbacks), а эффективность приближается к iocp если не такая же.

Автор: boostcoder 18.2.2012, 16:32
Цитата(12usver12 @  18.2.2012,  14:00 Найти цитируемый пост)
то попроще каркас у сервера будет через Completion Routines(Callbacks), а эффективность приближается к iocp если не такая же. 

:facepalm

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)