epoll的相关知识学习笔记
-
为什么在自己实现的TCP协议栈中不能直接使用系统的epoll
-
此处fd不是系统的fd
-
用户态fd只是一个int
-
epoll是应用程序和协议栈之间的一个组件
-
需要实现的函数:
-
-
-
epoll_create
-
- 创建eventpoll,创建fd
-
epoll_ctl
-
epoll_wait
-
epoll_event
-
epollin/epollout
-
-
如何使得多个客户端同时连接:
-
一个tcb对应一个fd,epoll检测tcb有没有事件,并管理fd;
-
协议栈
和tcpserver
使用两个线程进行工作; -
callback
相当于生产者的动作,epoll_wait()
相当于消费者的动作; -
协议栈将信息传输到epoll使用一个回调函数、
-
触发回调函数的情况
-
三次握手
-
established
-
fin()
-
接受到数据的时候
-
回调实现的就是往epoll加入节点
-
-
水平触发:就是协议栈有数据就一直调用callback
-
边缘触发:就是没有数据到有数据的状态出现时才调用callback
-
协议栈没有io的概念
-
需要支持查找频率很高的数据结构:红黑树、哈希、B树、B+树
-
哈希一开始占用的内存比较大,不合适
-
Btree和b+tree 查找性能不如rbtree,适合做磁盘索引
-
-
epitem是红黑树的节点