|
|
|
модели Winsock
|
|||
|---|---|---|---|
|
#18+
Хотелось бы спросить, какие режимы (блокирующий или неблокирующий) и модели работы с сокетами удобнее использовать в Windows (использовать select, события). Хотелось бы, чтобы обмен не отъедал много процессорного времени. Как мне представляется при использовании блокирующего режима нельзя корректно завершить поток ожидания соединения (так как будет висеть на accept) и кроме того, процессорное время используется нерационально. Как по вашему эффектвно ли каждое соединение обрабатывать в отдельном потоке? Хотелось бы, чтобы используемая модель работы с сокетами была довольно простая,позволяла эффектвно использовать процессорное время и функции ввода вывода не вешали поток. Мне кажется, что модель WSAEventSelect является разумным компромиссом простоты реализации и эффективности ввода вывода. Хорошо было бы услышать мнение людей, работатющих с сокетами в Windows. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2007, 11:51 |
|
||
|
модели Winsock
|
|||
|---|---|---|---|
|
#18+
имхо, зависит от задачи. Так по деталам: 1. Есть сихронный (блокирующий, не блокирующий) и асинхронный режимы. 2. Любой из режимов не будет отъедать много процессорного времени, если с умом подходить. 3. Завершить корректно поток в блокирующем режиме? Не знаю, может быть. А может быть, есть способы "сброса" сокета. 4. В блокирующем режиме при ожидании чего-то процессорное время не исползуется. 5. Если соединений предпологается не много, то может и эффективно. Иначе можно подумать о менеджере выделения процессорного времени в потоке и дергать им переодически каждый коннект. Опять же зависит от задачи. 6. п.2 И зависит от задачи. 7. Евент селект, я так понимаю, асинхронный режим. В данном случае тоже прийдется решать проблемы одновременного доступа. Так что, на любителя. Работаю в линах, но принципы ничем не отличаются (кроме WSAStartup, WSACleanup ;) ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2007, 12:03 |
|
||
|
модели Winsock
|
|||
|---|---|---|---|
|
#18+
Akhимхо, зависит от задачи. Так по деталам: 1. Есть сихронный (блокирующий, не блокирующий) и асинхронный режимы. 2. Любой из режимов не будет отъедать много процессорного времени, если с умом подходить. 3. Завершить корректно поток в блокирующем режиме? Не знаю, может быть. А может быть, есть способы "сброса" сокета. 4. В блокирующем режиме при ожидании чего-то процессорное время не исползуется. 5. Если соединений предпологается не много, то может и эффективно. Иначе можно подумать о менеджере выделения процессорного времени в потоке и дергать им переодически каждый коннект. Опять же зависит от задачи. 6. п.2 И зависит от задачи. 7. Евент селект, я так понимаю, асинхронный режим. В данном случае тоже прийдется решать проблемы одновременного доступа. Так что, на любителя. Работаю в линах, но принципы ничем не отличаются (кроме WSAStartup, WSACleanup ;) ). А как ты работаешть с сокетами. Если я правильно понял, когда поток ждёт accept(), то он не отъедает процессорное время? А можно ли не висеть при соединении с сервером (на connect()) и какие модели кроме событий позволяеют это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2007, 12:14 |
|
||
|
модели Winsock
|
|||
|---|---|---|---|
|
#18+
OLEG_2005А как ты работаешть с сокетами. Если я правильно понял, когда поток ждёт accept(), то он не отъедает процессорное время? А можно ли не висеть при соединении с сервером (на connect()) и какие модели кроме событий позволяеют это сделать? Я работаю в неблокирующем режиме. Когда поток на ассепте, это все равночто на селекте, а селект, как известно это очень хороший idle для прочессора. Про connect() недавно обсуждали в форуме, сам с этим заморачивался, так что поищи. Ну, и есстественно не блокирующий режим, кроме событий, позволяет не весеть на конеекте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2007, 12:20 |
|
||
|
модели Winsock
|
|||
|---|---|---|---|
|
#18+
Akh[quot OLEG_2005]как известно это очень хороший idle для прочессора А можно поподробнее об этом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2007, 12:27 |
|
||
|
модели Winsock
|
|||
|---|---|---|---|
|
#18+
OLEG_2005 Akh[quot OLEG_2005]как известно это очень хороший idle для прочессора А можно поподробнее об этом? SELECT(2) Linux Programmer’s Manual ... ОПИСАНИЕ ... Иногда select вызывается с пустыми наборами (всеми тремя), n равным нулю и непустым timeout для переносимой реализации (portable) перехода в режим ожидания (sleep) на периоды с точностью более секунды. ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2007, 12:36 |
|
||
|
модели Winsock
|
|||
|---|---|---|---|
|
#18+
Akh OLEG_2005 Akh[quot OLEG_2005]как известно это очень хороший idle для прочессора А можно поподробнее об этом? SELECT(2) Linux Programmer’s Manual ... ОПИСАНИЕ ... Иногда select вызывается с пустыми наборами (всеми тремя), n равным нулю и непустым timeout для переносимой реализации (portable) перехода в режим ожидания (sleep) на периоды с точностью более секунды. ... Может это справедливо только для Linux? По моему, в Windows один из трех параметров должен быть ненулевым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2007, 14:43 |
|
||
|
модели Winsock
|
|||
|---|---|---|---|
|
#18+
OLEG_2005 Akh SELECT(2) Linux Programmer’s Manual ... ОПИСАНИЕ ... Иногда select вызывается с пустыми наборами (всеми тремя), n равным нулю и непустым timeout для переносимой реализации (portable) перехода в режим ожидания (sleep) на периоды с точностью более секунды. ... Может это справедливо только для Linux? По моему, в Windows один из трех параметров должен быть ненулевым. Отмечено, же - перенасимая реализация. С чего ты взял, что в винде должен быть установлен хотябы один набор сокетов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2007, 14:55 |
|
||
|
модели Winsock
|
|||
|---|---|---|---|
|
#18+
Ссылку навскидку не вспомю (вроде MSDN). Не рекомендуется использовать select в качестве таймера в Windows ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2007, 14:58 |
|
||
|
модели Winsock
|
|||
|---|---|---|---|
|
#18+
Да, в принципе, это суть дела не меняет. Даже если connect() для блокирующих сокетов реализован как select() с последним парметром NULL, все равно он передает набор сокетов. И при использовании неблокируещих сокетов с помощью селекта тоже необходимо отмечать набор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2007, 15:03 |
|
||
|
модели Winsock
|
|||
|---|---|---|---|
|
#18+
не гарантируется ТОЧНОЕ время срабатывавания это так, на всякий случай ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2007, 15:15 |
|
||
|
модели Winsock
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2007, 16:03 |
|
||
|
модели Winsock
|
|||
|---|---|---|---|
|
#18+
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. А попробувать ? Нет ничего неопровержимей факта :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2007, 17:35 |
|
||
|
модели Winsock
|
|||
|---|---|---|---|
|
#18+
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. А что мы селект без сокетов изучаем? Сокеты уже изучили? ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2007, 17:59 |
|
||
|
модели Winsock
|
|||
|---|---|---|---|
|
#18+
Да, с сокетами я работал. Испольльзовал блокирующий режим. Хотелось, чтобы никакие функции не тормозили поток и использовать более эффективную модель работы с сокетами. Интересует способ эффективной и не очень сложный способ работы с сокетами в Windows без блокирования работы потока. Сейчас хочу реализовать обмен с использованием объектом событий, которые переходят в свободное состояние при возникновении событий сокетов. Очень интересно узнать, как присутствующие работают с сокетами в Windows. Переносимость на другие платформы, я думая, сейчас не очень актуальна для меня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2007, 09:18 |
|
||
|
модели Winsock
|
|||
|---|---|---|---|
|
#18+
Если переносимость не интересует - посмотрите на AcceptEx, TransmitFile ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2007, 09:31 |
|
||
|
модели Winsock
|
|||
|---|---|---|---|
|
#18+
OLEG_2005Очень интересно узнать, как присутствующие работают с сокетами в Windows. Переносимость на другие платформы, я думая, сейчас не очень актуальна для меня. socket() и иже с ними это Си. Если тебе не нравиться писать свои классы на это дело, то надо искать библиотеки/классы для винды или твоей среды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2007, 09:37 |
|
||
|
модели Winsock
|
|||
|---|---|---|---|
|
#18+
Именно свой класс я и хочу написать, чтобы он эффективно работал с сокетами. Пишу я на Visual C++. Я скачал несколько классов с www.codeproject.com, но мне они не очень нравятся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2007, 09:48 |
|
||
|
модели Winsock
|
|||
|---|---|---|---|
|
#18+
Хочешь высокую производительность - копай в сторону IOCP. Если устроит готовое решение, глянь библиотеку ProstoServer . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2007, 14:05 |
|
||
|
модели Winsock
|
|||
|---|---|---|---|
|
#18+
Порты ввода-вывода - довольно сложная модель. Думаю для моей задачи это очень круто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2007, 14:38 |
|
||
|
модели Winsock
|
|||
|---|---|---|---|
|
#18+
Ну дык заюзай библиотеку, там ничего сложного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2007, 14:47 |
|
||
|
модели Winsock
|
|||
|---|---|---|---|
|
#18+
Бесплатная версия библиотеки имеет ограничения, которые меня не устраивают. Да и хочется попробовать самому разобраться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2007, 15:46 |
|
||
|
модели Winsock
|
|||
|---|---|---|---|
|
#18+
OLEG_2005Бесплатная версия библиотеки имеет ограничения, которые меня не устраивают.Чем же? Делаешь сервер на миллион пользователей? ;) OLEG_2005Да и хочется попробовать самому разобраться.Это правильно. На codeproject.com есть несколько примеров по IOCP-серверам. Статья по пулу потоков: http://rsdn.ru/?article/baseserv/threadpool.xml ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2007, 15:54 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34469269&tid=2028989]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
158ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 504ms |

| 0 / 0 |
