I/O多路复用:select, poll, epoll[整理文]

2016-07-21  本文已影响150人  WendySays

I/O多路复用问题的引出

当需要读两个以上的I/O的时候,如果使用阻塞式的I/O,那么可能长时间的阻塞在一个描述符上面,另外的描述符虽然有数据但是不能读出来,这样实时性不能满足要求,大概的解决方案有以下几种:


select

select机制刚开始的时候,需要把fd_set从用户空间拷贝到内核空间,并且检测的fd数是有限制的,由FD_SETSIZE设置,一般是1024。
检测的时候,根据timeout,遍历fd_set表,把活跃的fd(可读写或者错误),拷贝到用户空间, 再在用户空间依次处理相关的fd。
select的缺点:


poll

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


epoll

epoll优点:


总结


参考文章

上一篇 下一篇

猜你喜欢

热点阅读