Epoll--整个红黑树--文件系统里的
Epitem--红黑树的节点--fd
1. epoll的数据结构如何组织 | a. 红黑树(集合) b. 就绪队列--可读fd(准备就绪的) |
加入就绪队列不代表删除,就绪队列是红黑树子集。
就绪队列的节点和红黑的节点是同一个节点
epoll --> tcpfd, udpfd, timerfd, filefd
2.如何通知到epoll模块--tcp为例
1. 三次握手完成,listenfd--> accept | 把listenfd加入到就绪队列里面 |
2. recvbuffer里面有数据--> recv | 把对应的这个 FD 加入到就绪队列里面 |
3. sendbuffer有空余的空间--> send | 把对应的这个 FD 加入到就绪队列里面 |
4.当协议栈收到fin--> close | 把对应的这个 FD 加入到就绪队列里面 |
3. LT/ET
LT-->while(处于有data的状态){数据copy 到 receive buff ,去通知协议栈}
ET-->if(接收到一个数据){数据copy 到 receive buff ,去通知协议栈}
ET → nonblock
协议有着前后关联关系的,不需要一次性读完的,用LT实现会更加简单。