select/poll/epoll事件驱动

本文详细对比了select、poll与epoll三种I/O多路复用技术的特点及适用场景。重点介绍了epoll的工作原理及其优势,包括事件驱动模型、高效的事件通知机制以及ET和LT两种工作模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.youkuaiyun.com/ying357/article/details/25155335


一直用select, 没有使用poll和Epoll, 近来需要使用Epoll。以前面试时,有人问过我, 我也简单作答。

现在写一下我的理解。

       三者区别:

       select: 监听的文件描述符有限制,Linux系统默认是1024

       poll:和select差不多, 比select优越的地方是监听的文件描述符个数可以不限

       epoll: 

                     1) 监听的文件描述符个数不限   

                     2) select/poll有事件时,会无差别遍历所有文件描述符,依次判断是否有数据,复杂度为O(n); 而epoll 会把哪个流发生了怎样的I/O事件通知我们,复杂度为O(1)。显然epoll优势明显。(具体用法google一下)

  1. select/poll:  
  2. while true   
  3. {  
  4.    select/poll(streams[])  
  5.    for i in streams[]   
  6.    {  
  7.        if i has data  
  8.        read / write until unavailable  
  9.    }  
  10. }  
  11.   
  12.   
  13. Epoll:  
  14. while true   
  15. {  
  16.    active_streams[] = epoll_wait(epollfd)  
  17.   for i in active_streams[]  
  18.    {  
  19.        read /write complete  
  20.    }  
  21. }  

                     3) epoll 包含 ET 和 LT两种模式。LT模式是默认的。 

                            LT模式和select/poll一致, 判断FD是否readable/writeable。只要FD可读或可写,即触发事件

                            ET模式, 只有FD变化时,才触发事件。故数据要一次读/写完才行。


 PS : select /poll 可用于阻塞/非阻塞IO

          epoll : LT模式和 select/poll一致, 但ET模式只能用于非阻塞IO


  相关资料:

  http://yaocoder.blog.51cto.com/2668309/888374

  http://blog.csdn .NET/eroswang/article/details/4481521
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值