三种I/O复用的方式比较
Posted wangkaia
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三种I/O复用的方式比较相关的知识,希望对你有一定的参考价值。
1 select方式,通过在不同的fd_set内注册不同的描述符,将信息传递给内核后,内核
将修改有事件发生的描述符,select描述符首先于监听的描述符数量收到限制,并且每次
都要遍历所有描述符因此其效率受到影响。
2 POLL方式虽然没有类描述符数量的限制,但是其效率仍然和select是相同的。每次调
用select和epoll的时候都要将用户态的数据完全的拷贝到内核态,因此效率比较低。
3 EPOLL的方式,不仅没有了监听描述符数量的限制,同时为了减少内核向用户态传递消
息的开销,内核和用户态通过共享内存来减少了该开销。内核当中只有活跃的fd会调用callback
来返回当前发生的事件。
epoll_create()调用时在内核当作建立了红黑树用于存储fd,同时建立了一个list用于存储就绪的事
件。
epoll_ct()查找要操作的fd是否存在,存在则进行相应的操作,否则注册事件发生时的回调函数。
epoll_wait()将就绪链表上的就绪事件直接拷贝到用户空间中即可。
因此epoll的实现时十分的高效率。
以上是关于三种I/O复用的方式比较的主要内容,如果未能解决你的问题,请参考以下文章
I/O--多路复用的三种机制Select,Poll和Epoll对比
I/O--多路复用的三种机制Select,Poll和Epoll对比
三种多路复用IO实现方式:select,poll,epoll的区别