Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / модели Winsock / 25 сообщений из 38, страница 1 из 2
18.04.2007, 11:51
    #34469051
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
Хотелось бы спросить, какие режимы (блокирующий или неблокирующий) и модели работы с сокетами удобнее использовать в Windows (использовать select, события). Хотелось бы, чтобы обмен не отъедал много процессорного времени. Как мне представляется при использовании блокирующего режима нельзя корректно завершить поток ожидания соединения (так как будет висеть на accept) и кроме того, процессорное время используется нерационально. Как по вашему эффектвно ли каждое соединение обрабатывать в отдельном потоке? Хотелось бы, чтобы используемая модель работы с сокетами была довольно простая,позволяла эффектвно использовать процессорное время и функции ввода вывода не вешали поток. Мне кажется, что модель WSAEventSelect является разумным компромиссом простоты реализации и эффективности ввода вывода. Хорошо было бы услышать мнение людей, работатющих с сокетами в Windows.
...
Рейтинг: 0 / 0
18.04.2007, 12:03
    #34469119
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
имхо, зависит от задачи.

Так по деталам:
1. Есть сихронный (блокирующий, не блокирующий) и асинхронный режимы.
2. Любой из режимов не будет отъедать много процессорного времени, если с умом подходить.
3. Завершить корректно поток в блокирующем режиме? Не знаю, может быть. А может быть, есть способы "сброса" сокета.
4. В блокирующем режиме при ожидании чего-то процессорное время не исползуется.
5. Если соединений предпологается не много, то может и эффективно. Иначе можно подумать о менеджере выделения процессорного времени в потоке и дергать им переодически каждый коннект. Опять же зависит от задачи.
6. п.2 И зависит от задачи.
7. Евент селект, я так понимаю, асинхронный режим. В данном случае тоже прийдется решать проблемы одновременного доступа. Так что, на любителя.

Работаю в линах, но принципы ничем не отличаются (кроме WSAStartup, WSACleanup ;) ).
...
Рейтинг: 0 / 0
18.04.2007, 12:14
    #34469195
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
Akhимхо, зависит от задачи.

Так по деталам:
1. Есть сихронный (блокирующий, не блокирующий) и асинхронный режимы.
2. Любой из режимов не будет отъедать много процессорного времени, если с умом подходить.
3. Завершить корректно поток в блокирующем режиме? Не знаю, может быть. А может быть, есть способы "сброса" сокета.
4. В блокирующем режиме при ожидании чего-то процессорное время не исползуется.
5. Если соединений предпологается не много, то может и эффективно. Иначе можно подумать о менеджере выделения процессорного времени в потоке и дергать им переодически каждый коннект. Опять же зависит от задачи.
6. п.2 И зависит от задачи.
7. Евент селект, я так понимаю, асинхронный режим. В данном случае тоже прийдется решать проблемы одновременного доступа. Так что, на любителя.

Работаю в линах, но принципы ничем не отличаются (кроме WSAStartup, WSACleanup ;) ).

А как ты работаешть с сокетами. Если я правильно понял, когда поток ждёт accept(), то он не отъедает процессорное время? А можно ли не висеть при соединении с сервером (на connect()) и какие модели кроме событий позволяеют это сделать?
...
Рейтинг: 0 / 0
18.04.2007, 12:20
    #34469229
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
OLEG_2005А как ты работаешть с сокетами. Если я правильно понял, когда поток ждёт accept(), то он не отъедает процессорное время? А можно ли не висеть при соединении с сервером (на connect()) и какие модели кроме событий позволяеют это сделать?

Я работаю в неблокирующем режиме.
Когда поток на ассепте, это все равночто на селекте, а селект, как известно это очень хороший idle для прочессора. Про connect() недавно обсуждали в форуме, сам с этим заморачивался, так что поищи. Ну, и есстественно не блокирующий режим, кроме событий, позволяет не весеть на конеекте.
...
Рейтинг: 0 / 0
18.04.2007, 12:23
    #34469245
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
...
Рейтинг: 0 / 0
18.04.2007, 12:27
    #34469269
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
Akh[quot OLEG_2005]как известно это очень хороший idle для прочессора
А можно поподробнее об этом?
...
Рейтинг: 0 / 0
18.04.2007, 12:36
    #34469326
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
OLEG_2005 Akh[quot OLEG_2005]как известно это очень хороший idle для прочессора
А можно поподробнее об этом?

SELECT(2) Linux Programmer’s Manual
...

ОПИСАНИЕ
...

Иногда select вызывается с пустыми наборами (всеми тремя), n равным нулю и непустым timeout для переносимой реализации
(portable) перехода в режим ожидания (sleep) на периоды с точностью более секунды.
...
...
Рейтинг: 0 / 0
18.04.2007, 14:43
    #34469860
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
Akh OLEG_2005 Akh[quot OLEG_2005]как известно это очень хороший idle для прочессора
А можно поподробнее об этом?

SELECT(2) Linux Programmer’s Manual
...

ОПИСАНИЕ
...

Иногда select вызывается с пустыми наборами (всеми тремя), n равным нулю и непустым timeout для переносимой реализации
(portable) перехода в режим ожидания (sleep) на периоды с точностью более секунды.
...


Может это справедливо только для Linux? По моему, в Windows один из трех параметров должен быть ненулевым.
...
Рейтинг: 0 / 0
18.04.2007, 14:55
    #34469915
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
OLEG_2005 Akh
SELECT(2) Linux Programmer’s Manual
...

ОПИСАНИЕ
...

Иногда select вызывается с пустыми наборами (всеми тремя), n равным нулю и непустым timeout для переносимой реализации
(portable) перехода в режим ожидания (sleep) на периоды с точностью более секунды.
...


Может это справедливо только для Linux? По моему, в Windows один из трех параметров должен быть ненулевым.

Отмечено, же - перенасимая реализация. С чего ты взял, что в винде должен быть установлен хотябы один набор сокетов?
...
Рейтинг: 0 / 0
18.04.2007, 14:58
    #34469937
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
Ссылку навскидку не вспомю (вроде MSDN). Не рекомендуется использовать select в качестве таймера в Windows
...
Рейтинг: 0 / 0
18.04.2007, 15:03
    #34469962
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
Да, в принципе, это суть дела не меняет. Даже если connect() для блокирующих сокетов реализован как select() с последним парметром NULL, все равно он передает набор сокетов.
И при использовании неблокируещих сокетов с помощью селекта тоже необходимо отмечать набор.
...
Рейтинг: 0 / 0
18.04.2007, 15:15
    #34470020
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
не гарантируется ТОЧНОЕ время срабатывавания
это так, на всякий случай
...
Рейтинг: 0 / 0
18.04.2007, 16:03
    #34470243
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
Akh OLEG_2005 Akh
SELECT(2) Linux Programmer’s Manual
...

ОПИСАНИЕ
...

Иногда select вызывается с пустыми наборами (всеми тремя), n равным нулю и непустым timeout для переносимой реализации
(portable) перехода в режим ожидания (sleep) на периоды с точностью более секунды.
...


Может это справедливо только для Linux? По моему, в Windows один из трех параметров должен быть ненулевым.

Отмечено, же - перенасимая реализация. С чего ты взял, что в винде должен быть установлен хотябы один набор сокетов?

Из MSDN описание функции select:
Any two of the parameters, readfds, writefds, or exceptfds, can be given as null. At least one must be non-null, and any non-null descriptor set must contain at least one handle to a socket.
...
Рейтинг: 0 / 0
18.04.2007, 17:35
    #34470660
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
OLEG_2005 Из MSDN описание функции select:
Any two of the parameters, readfds, writefds, or exceptfds, can be given as null. At least one must be non-null, and any non-null descriptor set must contain at least one handle to a socket.

А попробувать ?
Нет ничего неопровержимей факта :)
...
Рейтинг: 0 / 0
18.04.2007, 17:59
    #34470795
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
OLEG_2005 Из MSDN описание функции select:
Any two of the parameters, readfds, writefds, or exceptfds, can be given as null. At least one must be non-null, and any non-null descriptor set must contain at least one handle to a socket.

А что мы селект без сокетов изучаем? Сокеты уже изучили? ;)
...
Рейтинг: 0 / 0
19.04.2007, 09:18
    #34471604
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
Да, с сокетами я работал. Испольльзовал блокирующий режим. Хотелось, чтобы никакие функции не тормозили поток и использовать более эффективную модель работы с сокетами. Интересует способ эффективной и не очень сложный способ работы с сокетами в Windows без блокирования работы потока. Сейчас хочу реализовать обмен с использованием объектом событий, которые переходят в свободное состояние при возникновении событий сокетов. Очень интересно узнать, как присутствующие работают с сокетами в Windows. Переносимость на другие платформы, я думая, сейчас не очень актуальна для меня.
...
Рейтинг: 0 / 0
19.04.2007, 09:31
    #34471638
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
Если переносимость не интересует - посмотрите на AcceptEx, TransmitFile
...
Рейтинг: 0 / 0
19.04.2007, 09:37
    #34471656
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
OLEG_2005Очень интересно узнать, как присутствующие работают с сокетами в Windows. Переносимость на другие платформы, я думая, сейчас не очень актуальна для меня.

socket() и иже с ними это Си. Если тебе не нравиться писать свои классы на это дело, то надо искать библиотеки/классы для винды или твоей среды.
...
Рейтинг: 0 / 0
19.04.2007, 09:48
    #34471693
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
Именно свой класс я и хочу написать, чтобы он эффективно работал с сокетами. Пишу я на Visual C++. Я скачал несколько классов с www.codeproject.com, но мне они не очень нравятся.
...
Рейтинг: 0 / 0
19.04.2007, 14:05
    #34472772
Gomes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
Хочешь высокую производительность - копай в сторону IOCP. Если устроит готовое решение, глянь библиотеку ProstoServer .
...
Рейтинг: 0 / 0
19.04.2007, 14:38
    #34472935
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
Порты ввода-вывода - довольно сложная модель. Думаю для моей задачи это очень круто.
...
Рейтинг: 0 / 0
19.04.2007, 14:47
    #34472977
Gomes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
Ну дык заюзай библиотеку, там ничего сложного.
...
Рейтинг: 0 / 0
19.04.2007, 15:46
    #34473257
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
Бесплатная версия библиотеки имеет ограничения, которые меня не устраивают. Да и хочется попробовать самому разобраться.
...
Рейтинг: 0 / 0
19.04.2007, 15:54
    #34473294
Gomes
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
OLEG_2005Бесплатная версия библиотеки имеет ограничения, которые меня не устраивают.Чем же? Делаешь сервер на миллион пользователей? ;)

OLEG_2005Да и хочется попробовать самому разобраться.Это правильно. На codeproject.com есть несколько примеров по IOCP-серверам. Статья по пулу потоков: http://rsdn.ru/?article/baseserv/threadpool.xml
...
Рейтинг: 0 / 0
19.04.2007, 16:13
    #34473385
OLEG_2005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
модели Winsock
Просто мне хотелось бы использовать класс для доступа к TCP.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / модели Winsock / 25 сообщений из 38, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]