码迷,mamicode.com
首页 > 其他好文 > 详细

三种I/O复用的方式比较

时间:2020-06-18 20:00:26      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:back   epo   相同   红黑树   链表   高效   set   poll   活跃   

    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复用的方式比较

标签:back   epo   相同   红黑树   链表   高效   set   poll   活跃   

原文地址:https://www.cnblogs.com/wangkaia/p/13159151.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!