select always delivery descriptors to the kernel when select() called.
But epoll pass the descriptor once when calling epoll_ctl() and get events by calling epoll_wait() .
And loop 0 to max_descriptor for checking events when using select .
But the event loop had handles for checking events when using epoll .
This makes a difference in performance.
And select has a limit on the maximum number of descriptors, because it uses a bit array.
But epoll no limit, because it uses a structural array.
And select exists on most platforms (windows, linux, unix, bsd)
But epoll exists only on linux.
Of course, there are replacements for epoll on other platforms (IOCP on windows, kqueue on bsd, etc.)
taeguk
source share