select/poll/epoll事件驱动

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

现在写一下我的理解。

       三者区别:

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

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

       epoll: 

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

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

select/poll:
while true 
{
   select/poll(streams[])
   for i in streams[] 
   {
       if i has data
       read / write until unavailable
   }
}


Epoll:
while true 
{
   active_streams[] = epoll_wait(epollfd)
  for i in active_streams[]
   {
       read /write complete
   }
}

                     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、付费专栏及课程。

余额充值