Есть серверное юзермодное приложение. Мне нужно ожидать событие FD_READ на большом количестве(от 10к штук) активных соединений одновременно. Ну и соответственно реагировать на это событие моментально. Какие будут предложения?
Вообще в этом плане надо смотреть сорцы какого-нибудь апача, имхо. А если так то просто штатными рекомендуемыми мс средствами попробовать, все таки в юзер моде сильно не развернешься в этом плане вроде как.
да исходники смотреть там черт ногу сломает, пока все весь алгоритм ожидания соберешь воедино. >штатными рекомендуемыми мс средствами попробовать что имеется ввиду? Я вот пока вижу только WSAAsyncSelect, но что то меня не прет меня от нее... не глядел как она реализована, но что то мне подказывает что она медленная.
boost.asio погляжу. >в апаче socket per thread я не знаток кренелмода, но вить если создать 10к потоков(что меня крайне смущает) или 10к/MAXIMUM_WAIT_OBJECTS, и каждый поставить в ожидание WaitForMultipleEvents. Такии потоки вить будут просто игнорироваться ядром и не будут как либо расходывать cpu? ммм?
а шо такого? у потока не так много инфы которую надо хранить. Там стек небольшой нужен ( я поро обработку рида). Ну в ядру немного храниться, так что этот вариант можно попробовать.
Ставим в подсеть машин эдак 1K и будет почти моментально. ^) А вообще "моментально" понятие растяжимое.
Aspire пасибо, то что нужно. Идеально даже, такая схема работы и строилась в мозгу, только не когда не работал с iocp, поэтом не обратил на нее внимание в данной ситуации. Booster не смешно. )
djmans 10k открытых сокетов - я бы не решился такое серверное приложение писать под винду. В linux 2.6 есть очень хорошая функция epoll(), которая ближе всех подобралась к твоему требованию "реагировать на это событие моментально". Вот, почитай: hxxp://kovyrin.net/2006/04/13/epoll-asynchronous-network-programming/lang/ru/
_DEN_ да я понял, спасибо, но мне рулит чистый winapi. Atlantic да я понял, я с никсой ниже десктопа вообще незнаком, а учитсья некогда. Если будет нагрзка высокая, мне дешевле будет поставить десяток тачек на винде, чем сидеть курить никсу.
djmans если юзать boost.asio, код будет компилитсья и под никсами и под виндой, и кроме boost.asio ничего курить не надо