Название действительно говорит само за себя.
and ... также означает включение pselect и ppoll ..
Серверный проект, над которым я работаю, в основном структурирован с несколькими потоками . Каждый поток обрабатывает один или несколько сеансов. Все нити идентичны. Протокол заботится о том, в каком потоке будет проходить сеанс.
Я использую внутренний класс сокетов, который завершает работу. Интересен вызов checkread, который вызывает либо poll (linux), либо select (windows).
Таким образом, каждый поток в настоящее время вызывает опрос на одном сокете. Насколько я могу судить, использование epoll принесет пользу только в том случае, если этот поток будет смотреть на несколько сокетов, например, на HTTP-сервере. В моем случае это не то, что я делаю. И класс одновременно обрабатывает только один сокет.
На страницах руководства epoll есть краткое обсуждение запуска по фронту и уровню. Я не совсем понимаю, что это значит. В классе сокета я вижу оптимизацию в части кода Windows, которая сокращает вызов select с помощью ioctlsocket и FIONREAD, чтобы проверить, есть ли какие-либо данные. Интересно, вернет ли это значение> 0, даже если полный пакет UDP не прибыл во время вызова. Это то, что срабатывает по фронту в epoll?
В некоторых рудиментарных тестах я также не вижу заметной разницы между использованием select и poll.
Я вижу, что использование ppoll может быть полезным из-за большей точности тайм-аута. Есть какие-нибудь мысли?
И да, я пытаюсь оптимизировать пропускную способность для сеанса, который получает много данных. Сервер больше привязан к сети и диску, чем к ЦП.