其他分享
首页 > 其他分享> > 多路复用IO:select poll epoll

多路复用IO:select poll epoll

作者:互联网

select

Select(Max+1,&rset,null,null,null)是因为0~max是max+1。

过程:

缺点:

 

 

 

poll

Poll(pollfds,5(元素个数),50000(超时时间));

改善的缺点就是没了bitmap的上限(pollfd设置元素个数)和revents可以重用。

 

 

 

 

epoll

没有revents字段

1 epfd = epoll_create(10);   创建白板

2 epoll_ctl(epfd, EPOLL_CTL_ADD, ev.data.f0, &e0); 在白板上写字

3 内核与用户共享epfd    (通过mmap系统调用是共享的一种方式)

 

有数据置位,通过重排,将有数据的放到最前面的位置,返回触发了几个事件。这样只需要O(1)就可以遍历。

epoll只能工作在linux下!

 

 

 

epoll 水平触发(LT)与 边缘触发(ET)的区别?

区别:边缘触发效率更高,减少了事件被重复触发的次数,函数不会返回大量用户程序可能不需要的文件描述符。

使用场景:当连接数较多并且有很多的不活跃连接时,epoll 的效率比其它两者高很多。当连接数较少并且都十分活跃的情况下,由于 epoll 需要很多回调,因此性能可能低于其它两者。

 

标签:触发,置位,epoll,bitmap,内核,IO,poll,select
来源: https://www.cnblogs.com/philo-zhou/p/14391754.html