The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"несколько соединений одновременно"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"несколько соединений одновременно" 
Сообщение от Natan Искать по авторуВ закладки on 06-Июл-05, 11:52  (MSK)
Приветствую.

Стоит задача принимать и обслуживать несколько соединений одновременно. Думаю что fork() в таком случае не годится.

В каком направлении копать?

Спасибо.

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "несколько соединений одновременно" 
Сообщение от Simps Искать по авторуВ закладки(??) on 06-Июл-05, 11:57  (MSK)
>Приветствую.
>
>Стоит задача принимать и обслуживать несколько соединений одновременно. Думаю что fork() в
>таком случае не годится.
>
>В каком направлении копать?
>
>Спасибо.

Есть куча вариантов ... Например неблокируемый сокет, пул соединений,select (то что реализовывал я)

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "несколько соединений одновременно" 
Сообщение от Natan Искать по авторуВ закладки on 07-Июл-05, 11:53  (MSK)
>Есть куча вариантов ... Например неблокируемый сокет, пул соединений,select (то что реализовывал
>я)

В доках пишут что неблокируемый сокет не есть гуд (overhead на процессор), select() cейчас читаю, пока не все понял. А что вы имели в виду под пулом соединений? (poll() как альтернатива select()'у ? )

Если несложно - приведите небольшой пример с селектом для обслуживания нескольких сокетов.

Спасибо.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "несколько соединений одновременно" 
Сообщение от Simps Искать по авторуВ закладки(??) on 07-Июл-05, 12:17  (MSK)
>>Есть куча вариантов ... Например неблокируемый сокет, пул соединений,select (то что реализовывал
>>я)
>
>В доках пишут что неблокируемый сокет не есть гуд (overhead на процессор),
>select() cейчас читаю, пока не все понял. А что вы имели
>в виду под пулом соединений? (poll() как альтернатива select()'у ? )
>
>
>Если несложно - приведите небольшой пример с селектом для обслуживания нескольких сокетов.
>
>
>Спасибо.

Закажи себе http://www.ozon.ru/context/detail/id/1390985/
Там все очень подробно расписано, все варианты их плюсы и минусы и т.д. и т.п.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "несколько соединений одновременно" 
Сообщение от Badcast Искать по авторуВ закладки on 06-Июл-05, 19:26  (MSK)
Думаю, что fork() вполне сгодится, только это не лучший вариант. Одно из самых перспективных решений - threads.
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "несколько соединений одновременно" 
Сообщение от Darknode Искать по авторуВ закладки on 07-Июл-05, 12:41  (MSK)
>Думаю, что fork() вполне сгодится, только это не лучший вариант. Одно из
>самых перспективных решений - threads.

Извините, но с чего это Вы взяли, что под никсы потоки лучше чем процессы?

Я писал сервера, которые как раз обслуживают несколько соединений одновременно, именно использую fork.
Может я в потемках скитался? Аргументируйте плз, почему на потоках сервера получаются лучше чем на процессах? Скиньте плз ссылку, где это написанно.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

18. "несколько соединений одновременно" 
Сообщение от Vladislav Lazarenko emailИскать по авторуВ закладки on 08-Июл-05, 11:13  (MSK)
>>Думаю, что fork() вполне сгодится, только это не лучший вариант. Одно из
>>самых перспективных решений - threads.
>
>Извините, но с чего это Вы взяли, что под никсы потоки лучше
>чем процессы?
>
>Я писал сервера, которые как раз обслуживают несколько соединений одновременно, именно использую
>fork.
>Может я в потемках скитался? Аргументируйте плз, почему на потоках сервера получаются
>лучше чем на процессах? Скиньте плз ссылку, где это написанно.

Молодой человек, THREADS лучше PROCESSES, если нужно работать с одними и теми же данными в нескольких контекстах исполнения. Это факт, какие ссылки? Programming with POSIX threads книгу можете почитать.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

24. "ссылки" 
Сообщение от Badcast Искать по авторуВ закладки on 08-Июл-05, 15:17  (MSK)
>>Думаю, что fork() вполне сгодится, только это не лучший вариант. Одно из
>>самых перспективных решений - threads.
>
>Извините, но с чего это Вы взяли, что под никсы потоки лучше
>чем процессы?
>
>Я писал сервера, которые как раз обслуживают несколько соединений одновременно, именно использую
>fork.
>Может я в потемках скитался? Аргументируйте плз, почему на потоках сервера получаются
>лучше чем на процессах? Скиньте плз ссылку, где это написанно.


Пожалуйста, взгляните на http://cs.baylor.edu/~donahoo/practical/CSockets/textcode.html и http://www.cs.cf.ac.uk/Dave/C/node32.html#SECTION003270000000000000000.
Не далее чем полгода назад я сам писал коммерческий сервер под Solaris с использованием кроссплатформенной(!!!) boost::thread.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "несколько соединений одновременно" 
Сообщение от Solotony emailИскать по авторуВ закладки on 07-Июл-05, 12:41  (MSK)
почему это не сгодится? а как-же тогда все демоны работают?

accept, а затем сразу fork (или в обратном порядке)


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "несколько соединений одновременно" 
Сообщение от Darknode Искать по авторуВ закладки on 07-Июл-05, 12:42  (MSK)
>почему это не сгодится? а как-же тогда все демоны работают?
>
>accept, а затем сразу fork (или в обратном порядке)


Советую, сначало аксепт, потом форк ;)

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

10. "несколько соединений одновременно" 
Сообщение от Solotony emailИскать по авторуВ закладки on 07-Июл-05, 12:58  (MSK)
>>почему это не сгодится? а как-же тогда все демоны работают?
>>
>>accept, а затем сразу fork (или в обратном порядке)
>
>
>Советую, сначало аксепт, потом форк ;)

да, это собственно вопрос и был :) я почему-то (начитавшись книжек наверно) всегда именно так и делал accept, а затем fork.

Но тут мне пришла в голову мысля - а почему-бы не сделать в обратном порядке (только в дочернем процессе) или в этом случае запрос на соединение так и останется у родителя непринятым?

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

12. "несколько соединений одновременно" 
Сообщение от Darknode Искать по авторуВ закладки on 07-Июл-05, 13:21  (MSK)
>>>почему это не сгодится? а как-же тогда все демоны работают?
>>>
>>>accept, а затем сразу fork (или в обратном порядке)
>>
>>
>>Советую, сначало аксепт, потом форк ;)
>
>да, это собственно вопрос и был :) я почему-то (начитавшись книжек наверно)
>всегда именно так и делал accept, а затем fork.
>
>Но тут мне пришла в голову мысля - а почему-бы не сделать
>в обратном порядке (только в дочернем процессе) или в этом случае
>запрос на соединение так и останется у родителя непринятым?

ты уж определись, в каком процессе будешь принимать соединения, в родительском или дочернем? :)
я бы все таки принимал соединения в родительском и это логично, а уж в дочернем процессе работал с клиентом...

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

13. "несколько соединений одновременно" 
Сообщение от Solotony emailИскать по авторуВ закладки on 07-Июл-05, 13:46  (MSK)

>ты уж определись, в каком процессе будешь принимать соединения, в родительском или
>дочернем? :)
>я бы все таки принимал соединения в родительском и это логично, а
>уж в дочернем процессе работал с клиентом...

подумав еще немного я понял что сморозил какую-то чушь. буду делать и дальше как делалал :)

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

15. "несколько соединений одновременно" 
Сообщение от Аноним emailИскать по авторуВ закладки on 07-Июл-05, 15:17  (MSK)
>подумав еще немного я понял что сморозил какую-то чушь.

Почему чушь? Так prefork-сервера работают.


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

21. "несколько соединений одновременно" 
Сообщение от Solotony emailИскать по авторуВ закладки on 08-Июл-05, 12:02  (MSK)
>>подумав еще немного я понял что сморозил какую-то чушь.
>
>Почему чушь? Так prefork-сервера работают.

в этом случае только один из деток ждет входещее соединение?

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

22. "несколько соединений одновременно" 
Сообщение от Forth Искать по авторуВ закладки(??) on 08-Июл-05, 13:05  (MSK)
>>>подумав еще немного я понял что сморозил какую-то чушь.
>>
>>Почему чушь? Так prefork-сервера работают.
>
>в этом случае только один из деток ждет входещее соединение?

Процесс-мастер передает сокеты потомкам через sendmsg.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

23. "несколько соединений одновременно" 
Сообщение от Аноним emailИскать по авторуВ закладки on 08-Июл-05, 13:15  (MSK)
>в этом случае только один из деток ждет входещее соединение?

Как напишешь.

Смотри про accept serialization http://httpd.apache.org/docs/misc/perf-tuning.html

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

25. "несколько соединений одновременно" 
Сообщение от Vladislav emailИскать по авторуВ закладки(??) on 15-Июл-05, 22:36  (MSK)
Попахивает пионерией...
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "несколько соединений одновременно" 
Сообщение от Natan Искать по авторуВ закладки on 07-Июл-05, 12:53  (MSK)
>почему это не сгодится? а как-же тогда все демоны работают?
>
>accept, а затем сразу fork (или в обратном порядке)

как я понимаю fork() достаточно тяжелая операция, и для определенных задач (например одновременно 5000 соединений) не годится.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

11. "несколько соединений одновременно" 
Сообщение от Darknode Искать по авторуВ закладки on 07-Июл-05, 13:18  (MSK)
>>почему это не сгодится? а как-же тогда все демоны работают?
>>
>>accept, а затем сразу fork (или в обратном порядке)
>
>как я понимаю fork() достаточно тяжелая операция, и для определенных задач (например
>одновременно 5000 соединений) не годится.

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

Плюнули на потоки, переписали используя процессы...все ок, сервер живет и не падает, утечки памяти и др. проблеммы пофиг, все равно дочерние процессы мирно умирают, когда отработает комманды клиентов, и вроде ничего страшного нет в процессах...
Есть еще такое мнение, пока не понял, откуда оно пришло, просто слышал звон, что под юниксы лучше использовать процессы, под виндос потоки! Если у кого есть инфа, по этому вопросу, скиньте...

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

14. "несколько соединений одновременно" 
Сообщение от Solotony emailИскать по авторуВ закладки on 07-Июл-05, 14:04  (MSK)
>Есть еще такое мнение, пока не понял, откуда оно пришло, просто слышал
>звон, что под юниксы лучше использовать процессы, под виндос потоки! Если
>у кого есть инфа, по этому вопросу, скиньте...

Потому-что в винде для начала нет форка, и порождение нового процесса - это действительно целая история. А новый поток создается довольно легко.
Планировщик в винде работает именно с потоками.

В линуксе (а как в других - не знаю) потоки это фактически процессы. И никакого особого выигрыша от их использования нет.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

16. "несколько соединений одновременно" 
Сообщение от Darknode Искать по авторуВ закладки on 07-Июл-05, 15:32  (MSK)
>>Есть еще такое мнение, пока не понял, откуда оно пришло, просто слышал
>>звон, что под юниксы лучше использовать процессы, под виндос потоки! Если
>>у кого есть инфа, по этому вопросу, скиньте...
>
>Потому-что в винде для начала нет форка, и порождение нового процесса -
>это действительно целая история. А новый поток создается довольно легко.
>Планировщик в винде работает именно с потоками.
>
>В линуксе (а как в других - не знаю) потоки это фактически
>процессы. И никакого особого выигрыша от их использования нет.

В виндах есть подобие форка, CreateProcess кажись, и там не такая уж длинная история...Но только в виндах почему-то стараются не использовать виндовый форк , а пользуются потоками...ну и флаг им в руки...
А процесс создал, поюзал его и убил, никакой головной боли, а вот потоки...надо корректно их прибить, что не всегда получается, следить за памятью и т.п.
ИМХО, лучше использовать процессы, дабы потом полгода не думать, почему все так плохо работает.

Потоки в линуксе и не в линуксе не есть процессы, совсем по другому организуется память!

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

19. "несколько соединений одновременно" 
Сообщение от Solotony emailИскать по авторуВ закладки on 08-Июл-05, 11:22  (MSK)
CreateProcess - это сразу fork+exec, т.е. новый процесс будет порожден "с нуля", а не как копия родительского. Когда в винде появится fork то это будет уже не винда, *NIX :)  Поэтому в винде и используют только потоки.
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

20. "несколько соединений одновременно" 
Сообщение от Solotony emailИскать по авторуВ закладки on 08-Июл-05, 11:41  (MSK)
>Потоки в линуксе и не в линуксе не есть процессы, совсем по
>другому организуется память!

А о каких, собственно, потоках мы говорим? User-space или Kernel-space? И о какой реализации? Там их штук 5, или больше. И все реализации различны.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "несколько соединений одновременно" 
Сообщение от Darknode Искать по авторуВ закладки on 07-Июл-05, 12:44  (MSK)
>Приветствую.
>
>Стоит задача принимать и обслуживать несколько соединений одновременно. Думаю что fork() в
>таком случае не годится.
>
>В каком направлении копать?
>
>Спасибо.

Кто такую глупость сказал, что fork не годится?


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

17. "несколько соединений одновременно" 
Сообщение от execve Искать по авторуВ закладки(ok) on 08-Июл-05, 10:58  (MSK)
>Стоит задача принимать и обслуживать несколько соединений одновременно. Думаю что fork() в
>таком случае не годится.
>
>В каком направлении копать?

fido7.ru.unix.prog: FAQ appendix 1: как писать сервера
http://groups.google.com/groups?selm=200506020714.j527E0f5024119%40segfault.kiev.ua

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру