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

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

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

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

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

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

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

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

ОПИСАНИЕ
...

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

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

ОПИСАНИЕ
...

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


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

ОПИСАНИЕ
...

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


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

Отмечено, же - перенасимая реализация. С чего ты взял, что в винде должен быть установлен хотябы один набор сокетов?
...
Рейтинг: 0 / 0
модели Winsock
    #34469937
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ссылку навскидку не вспомю (вроде MSDN). Не рекомендуется использовать select в качестве таймера в Windows
...
Рейтинг: 0 / 0
модели Winsock
    #34469962
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, в принципе, это суть дела не меняет. Даже если connect() для блокирующих сокетов реализован как select() с последним парметром NULL, все равно он передает набор сокетов.
И при использовании неблокируещих сокетов с помощью селекта тоже необходимо отмечать набор.
...
Рейтинг: 0 / 0
модели Winsock
    #34470020
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не гарантируется ТОЧНОЕ время срабатывавания
это так, на всякий случай
...
Рейтинг: 0 / 0
модели Winsock
    #34470243
OLEG_2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
модели Winsock
    #34470660
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
модели Winsock
    #34470795
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
модели Winsock
    #34471604
OLEG_2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, с сокетами я работал. Испольльзовал блокирующий режим. Хотелось, чтобы никакие функции не тормозили поток и использовать более эффективную модель работы с сокетами. Интересует способ эффективной и не очень сложный способ работы с сокетами в Windows без блокирования работы потока. Сейчас хочу реализовать обмен с использованием объектом событий, которые переходят в свободное состояние при возникновении событий сокетов. Очень интересно узнать, как присутствующие работают с сокетами в Windows. Переносимость на другие платформы, я думая, сейчас не очень актуальна для меня.
...
Рейтинг: 0 / 0
модели Winsock
    #34471638
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если переносимость не интересует - посмотрите на AcceptEx, TransmitFile
...
Рейтинг: 0 / 0
модели Winsock
    #34471656
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OLEG_2005Очень интересно узнать, как присутствующие работают с сокетами в Windows. Переносимость на другие платформы, я думая, сейчас не очень актуальна для меня.

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

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


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