IO多路转接技术
目录
1、简单介绍
- select/poll 委托内核去做 假设:100/30 只能得到有30个在传输数据,需要去遍历100个,找出那30个。
- epoll 不用遍历
2、select技术
- 在用户区,先构造一张有关文件描述符的列表,将要监听的文件描述符添加到该表中;
- select会拷贝一张表到内核区;
- 遍历;
- 内核区会检测缓冲区是否有数据,有则置为1,没有则置为0;
- 覆盖到用户区,即reads。
3、poll技术
可以突破1024,因为是用链表存储的。
4、epoll技术
在内部是一个红黑树结构。
epoll整个过程
epoll三种工作模式
(1)水平触发模式 ——不是一次性读完
只要fd对应的读缓冲区有数据,则epoll_wait返回,返回次数与发送数据的次数无关。
(2)边沿触发模式 ET
客户端给server发数据,发一次数据server的epoll_wait返回一次,不在乎数据是否读完。(会堵在缓冲区,epoll_wait调用次数越多,系统的开销越大)。数据读完之后,recv会阻塞,解决阻塞问题:设置非阻塞。
(3)边沿非阻塞触发(效率最高)
如何设置非阻塞:1)open();2)fcntl;3)将缓冲区的全部数据读出。