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