1 select方式,通过在不同的fd_set内注册不同的描述符,将信息传递给内核后,内核
将修改有事件发生的描述符,select描述符首先于监听的描述符数量收到限制,并且每次
都要遍历所有描述符因此其效率受到影响。
2 POLL方式虽然没有类描述符数量的限制,但是其效率仍然和select是相同的。每次调
用select和epoll的时候都要将用户态的数据完全的拷贝到内核态,因此效率比较低。
3 EPOLL的方式,不仅没有了监听描述符数量的限制,同时为了减少内核向用户态传递消
息的开销,内核和用户态通过共享内存来减少了该开销。内核当中只有活跃的fd会调用callback
来返回当前发生的事件。
epoll_create()调用时在内核当作建立了红黑树用于存储fd,同时建立了一个list用于存储就绪的事
件。
epoll_ct()查找要操作的fd是否存在,存在则进行相应的操作,否则注册事件发生时的回调函数。
epoll_wait()将就绪链表上的就绪事件直接拷贝到用户空间中即可。
因此epoll的实现时十分的高效率。
原文:https://www.cnblogs.com/wangkaia/p/13159151.html