epoll VS select - PullRequest
       47

epoll VS select

7 голосов
/ 10 июня 2011

Я прочитал пару сетевых книг, чтобы получить представление о различиях между epoll и select, но они лишь слегка охватили эту концепцию.Я буду признателен, если вы, ребята, можете предоставить мне ключевые различия в деталях.

Заранее спасибо

Ответы [ 2 ]

14 голосов
/ 10 июня 2011

select - это стандартное средство Unix для асинхронного ввода-вывода.Его интерфейс программирования необычен, а его реализация в большинстве Unixes в лучшем случае посредственная.Это также накладывает ограничение на максимальное количество дескрипторов, которые может наблюдать процесс, что неудобно в приложении.Что касается эффективности, производительность select обычно линейно падает с количеством дескрипторов.

epoll - огромное улучшение по сравнению с select с точки зрения интерфейса программирования и эффективности, но предоставляется только при запуске Linuxс версии 2.6.Другие Unix-ы также имеют свои специализированные вызовы.

1 голос
/ 09 апреля 2015

select всегда доставляет дескрипторы ядру при вызове select().
Но epoll доставляет дескриптор один раз при вызове epoll_ctl() и получает события, вызывая epoll_wait().

И цикл от 0 до max_descriptor для проверки событий при использовании select.
Но цикл для событий произошел дескрипторы для проверки событий при использовании epoll.

Это влияет на производительность.

И select имеет ограничение на максимальное количество дескрипторов, поскольку он использует битовый массив.
Но у epoll нет ограничения, потому что он использует структурный массив.

И select существует в большинстве платформ (Windows, Linux, Unix, BSD)
Но epoll существует только в Linux.
Конечно, существуют замены epoll на других платформах (IOCP в Windows, kqueue в BSD и т. Д.)

...