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