应用层协议:select(1024),poll(大于1024),epoll(Linux专有)
select和epoll区别
select事件表:三类事件,读,写,异常
select和poll 每次循环,都需要将所有描述符拷贝到内核空间。内核实现:轮询O(n)。遍历所有描述符,找到就绪的描述符O(n)
epoll:在内核创建内核事件表,每个描述符只需添加一次。内核实现:注册函数回调的方式O(1).epoll_wait可直接获取就绪的描述符O(1)
select和poll也有LT模式
epoll分为ET,LT模式
LT模式:水平模式,可分批读取,不易丢失数据
事件就绪,一直提醒,直到处理完全部数据。
ET模式:边缘模式,只读一次
事件就绪,只提醒一次
1、循环2、描述符设置为非阻塞状态
测试用例: