`

select,poll,epoll

阅读更多
select,poll,epoll

详解转载自:https://www.cnblogs.com/Anker/p/3265058.html

jdk1.4中nio中引入了select,poll模式,jdk1.5中sun对其进行了优化,引入了epoll。

select缺点:
1:每次调用select都需要把fd从用户态拷贝到内核态,开销比较大。
2:每次都需要在内核遍历传入的fd。 
3:支持文件数量比较小,默认是102

poll缺点:
poll的实现和select非常相似,只是描述fd集合的方式不同,poll使用pollfd结构而不是select的fd_set结构,其他的都差不多。

epoll:
epoll提供了三个函数进行处理:epoll_create,epoll_ctl和epoll_wait,epoll_create是创建一个epoll句柄;epoll_ctl是注册要监听的事件类型;epoll_wait则是等待事件的产生。
epoll优点:
1:每次注册新事件到epoll句柄都会把所有的fd拷贝进来,而不是在epoll_wait中重复拷贝,这样确保fd只会被拷贝一次 。
2:epoll不是像select/poll那样每次都把fd加入等待队列中,epoll把每个fd指定一个回调函数,当设备就绪时,唤醒等待队列的等待者就会调用其的回调函数,这个回调函数会把就绪的fd放入一个就绪链表。epoll_wait就是在这个就绪链表中查看有没有就绪fd。
3:epoll没有fd数目限制。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics