Ожидиние событий на большом количестве сокетов.

Тема в разделе "WASM.NETWORKS", создана пользователем djmans, 20 дек 2009.

  1. djmans

    djmans New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    312
    Есть серверное юзермодное приложение. Мне нужно ожидать событие FD_READ на большом количестве(от 10к штук) активных соединений одновременно. Ну и соответственно реагировать на это событие моментально. Какие будут предложения?
     
  2. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    не как
     
  3. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Вообще в этом плане надо смотреть сорцы какого-нибудь апача, имхо. А если так то просто штатными рекомендуемыми мс средствами попробовать, все таки в юзер моде сильно не развернешься в этом плане вроде как.
     
  4. djmans

    djmans New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    312
    да исходники смотреть там черт ногу сломает, пока все весь алгоритм ожидания соберешь воедино.

    >штатными рекомендуемыми мс средствами попробовать
    что имеется ввиду? Я вот пока вижу только WSAAsyncSelect, но что то меня не прет меня от нее... не глядел как она реализована, но что то мне подказывает что она медленная.
     
  5. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    SPA
    в апаче socket per thread

    djmans
    юзай boost.asio
     
  6. djmans

    djmans New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    312
    boost.asio погляжу.

    >в апаче socket per thread
    я не знаток кренелмода, но вить если создать 10к потоков(что меня крайне смущает) или 10к/MAXIMUM_WAIT_OBJECTS, и каждый поставить в ожидание WaitForMultipleEvents. Такии потоки вить будут просто игнорироваться ядром и не будут как либо расходывать cpu? ммм?
     
  7. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    а шо такого? у потока не так много инфы которую надо хранить. Там стек небольшой нужен ( я поро обработку рида). Ну в ядру немного храниться, так что этот вариант можно попробовать.
     
  8. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    http://blogs.technet.com/markrussinovich/archive/2009/07/08/3261309.aspx
     
  9. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    I/O Completion port?
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Ставим в подсеть машин эдак 1K и будет почти моментально. ^) А вообще "моментально" понятие растяжимое.
     
  11. djmans

    djmans New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    312
    Aspire пасибо, то что нужно. Идеально даже, такая схема работы и строилась в мозгу, только не когда не работал с iocp, поэтом не обратил на нее внимание в данной ситуации.
    Booster не смешно. )
     
  12. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    асинхронные сокеты не подходят?
     
  13. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    а ну вроде это уже написали)
     
  14. Atlantic

    Atlantic Member

    Публикаций:
    0
    Регистрация:
    22 июн 2005
    Сообщения:
    322
    Адрес:
    Швеция
    djmans
    10k открытых сокетов - я бы не решился такое серверное приложение писать под винду. В linux 2.6 есть очень хорошая функция epoll(), которая ближе всех подобралась к твоему требованию "реагировать на это событие моментально". Вот, почитай: hxxp://kovyrin.net/2006/04/13/epoll-asynchronous-network-programming/lang/ru/
     
  15. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    djmans

    Boost.Asio под виндой работает через IOCP. Все уже украдено до нас.
     
  16. djmans

    djmans New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    312
    _DEN_ да я понял, спасибо, но мне рулит чистый winapi.
    Atlantic да я понял, я с никсой ниже десктопа вообще незнаком, а учитсья некогда. Если будет нагрзка высокая, мне дешевле будет поставить десяток тачек на винде, чем сидеть курить никсу.
     
  17. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    djmans
    если юзать boost.asio, код будет компилитсья и под никсами и под виндой,
    и кроме boost.asio ничего курить не надо
     
  18. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    djmans
    я тоже за буст, хотя с этой чтукой конкретно не работал