【linux系列知识】IO多路转接技术

IO多路转接技术

目录

IO多路转接技术

1、简单介绍

2、select技术

3、poll技术

4、epoll技术

epoll整个过程

epoll三种工作模式

1、简单介绍

  • select/poll 委托内核去做  假设:100/30 只能得到有30个在传输数据,需要去遍历100个,找出那30个。
  • epoll 不用遍历

2、select技术

  • 在用户区,先构造一张有关文件描述符的列表,将要监听的文件描述符添加到该表中; 
  • select会拷贝一张表到内核区;
  • 遍历;
  • 内核区会检测缓冲区是否有数据,有则置为1,没有则置为0;
  • 覆盖到用户区,即reads。

【linux系列知识】IO多路转接技术_第1张图片

3、poll技术

     可以突破1024,因为是用链表存储的。

4、epoll技术

      在内部是一个红黑树结构。

epoll整个过程

【linux系列知识】IO多路转接技术_第2张图片

epoll三种工作模式

(1)水平触发模式 ——不是一次性读完

         只要fd对应的读缓冲区有数据,则epoll_wait返回,返回次数与发送数据的次数无关。

(2)边沿触发模式 ET

         客户端给server发数据,发一次数据server的epoll_wait返回一次,不在乎数据是否读完。(会堵在缓冲区,epoll_wait调用次数越多,系统的开销越大)。数据读完之后,recv会阻塞,解决阻塞问题:设置非阻塞。

(3)边沿非阻塞触发(效率最高) 

如何设置非阻塞:1)open();2)fcntl;3)将缓冲区的全部数据读出。

你可能感兴趣的:(linux)