С одним файловым дескриптором есть ли разница в производительности между select, poll и epoll и …?

Название действительно говорит само за себя.

and ... также означает включение pselect и ppoll ..

Серверный проект, над которым я работаю, в основном структурирован с несколькими потоками . Каждый поток обрабатывает один или несколько сеансов. Все нити идентичны. Протокол заботится о том, в каком потоке будет проходить сеанс.

Я использую внутренний класс сокетов, который завершает работу. Интересен вызов checkread, который вызывает либо poll (linux), либо select (windows).

Таким образом, каждый поток в настоящее время вызывает опрос на одном сокете. Насколько я могу судить, использование epoll принесет пользу только в том случае, если этот поток будет смотреть на несколько сокетов, например, на HTTP-сервере. В моем случае это не то, что я делаю. И класс одновременно обрабатывает только один сокет.

На страницах руководства epoll есть краткое обсуждение запуска по фронту и уровню. Я не совсем понимаю, что это значит. В классе сокета я вижу оптимизацию в части кода Windows, которая сокращает вызов select с помощью ioctlsocket и FIONREAD, чтобы проверить, есть ли какие-либо данные. Интересно, вернет ли это значение> 0, даже если полный пакет UDP не прибыл во время вызова. Это то, что срабатывает по фронту в epoll?

В некоторых рудиментарных тестах я также не вижу заметной разницы между использованием select и poll.

Я вижу, что использование ppoll может быть полезным из-за большей точности тайм-аута. Есть какие-нибудь мысли?

И да, я пытаюсь оптимизировать пропускную способность для сеанса, который получает много данных. Сервер больше привязан к сети и диску, чем к ЦП.

14
задан casperOne 27 April 2012 в 20:46
поделиться