Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2013, 22:12   #1
RuVarez
Форумчанин
 
Аватар для RuVarez
 
Регистрация: 25.08.2010
Сообщений: 258
По умолчанию Синхронные, асинхронные, блокирующие, неблокирующие сокеты

Всем привет! Вобщем собственно вопрос: прочетал кучу литературы начиная с сокетов Беркли, ну толком не понял как да что! Насчет блокирующих, неблокирующих понял в чом отличие, а вот в чем разница между неблокирующими и асинхроными не понял. Прошу объяснить мне эту разницу! И самый главный вопрос: практическое применение синхронных, асинхронных сокетов!!! Какой тип лучше выбрать (в моем случае для игрового сервера).Заранее благодарю!
RuVarez вне форума Ответить с цитированием
Старый 22.03.2013, 22:39   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

В неблокирующих само чтение данных произходит синхронно, *после* сигнала о наличии данных. В асинхронных не ждем сигнала о наличии данных и начинаем сразу читать а сигнал посылается после того, как данные будут скопированы в буфер.

При чтении из сокетов разница неощутима, поскольку читаются маленькие блоки. В принципе асинхронные лучше, но там столько много подводных камней, что лучше обычными неблокирующими.
waleri вне форума Ответить с цитированием
Старый 22.03.2013, 22:49   #3
RuVarez
Форумчанин
 
Аватар для RuVarez
 
Регистрация: 25.08.2010
Сообщений: 258
По умолчанию

а чем они лучше если не секрет! я просто не вижу разницу! как по мне лучше взять, даже те же блокирующие а всю работу выполнять в ThreadPool чтоб не создать связь клиент-поток! Просто я не знаю как лучше! Ведь на игровом сервере данные от клиентов будут приходить постоянно, тем более что таких клиентов будет много!
Как вы думаете как лучше?
RuVarez вне форума Ответить с цитированием
Старый 23.03.2013, 10:22   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

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

С блокирующими вам понадобится по два потока на каждого клиента. Если у вас десяток соединений - сойдет, но если речь идет о сотнях а то и больше, тогда уже не самый удачный вариант.
waleri вне форума Ответить с цитированием
Старый 23.03.2013, 20:38   #5
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

так это, блокирующий это синоним синхронного, означает, что вызов процедуры на блокирующем объекте не вернет управление вызывающему потоку до полного завершения процедуры. неблокирующий (асинхронный) - означает, что при вызове процедуры на неблокирующем объекте управление будет возвращено управляющему потоку немедленно, независимо от текущего состояния выполнения процедуры.

2waleri
я всегда думал, что очередь уже изобретена, поэтому достаточно двух потоков, один на чтение, второй на отправку.

Последний раз редактировалось f.hump; 23.03.2013 в 20:48.
f.hump вне форума Ответить с цитированием
Старый 23.03.2013, 22:47   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от f.hump Посмотреть сообщение
2waleri
я всегда думал, что очередь уже изобретена, поэтому достаточно двух потоков, один на чтение, второй на отправку.
При блокирующих сокетах - недостаточно. Работать конечно будет, но наверно если бы этого было достаточно никто бы не парился с select-ом или асинхронным I/O
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
асинхронные вычисления в .Net Reskov Общие вопросы .NET 0 05.05.2012 02:27
синхронные/асинхронные запросы Dimarik JavaScript, Ajax 2 05.09.2010 19:02
Не блокирующие сокеты. profi Win Api 3 13.03.2010 18:27
Сокеты SL1CK Общие вопросы C/C++ 8 05.10.2009 13:20
Сокеты: блокируемые или асинхронные? AndreySt Win Api 4 14.09.2009 18:43