select无差别轮询
(监听的数量,可读,可写,异常)返回值是所有满足条件的监听集合个数
poll可以指定size,
可以突破select的上限1024
event poll集成了上面两个,用的是红黑树,如果有事件发生传回文件描述符到用户态的一个队列中
有两种触发模式,减少阻塞等待:ET 边沿触发 LT 水平触发
边沿触发只在有事件写过来的时候才会触发
比如有5000个字节传过来,只需要读50个字节,就能知道要不要读剩下的字符了,所以就用边沿触发
epoll 用红黑树和链表,并且epoll_wait用了回调函数,不用每次都把数据从用户态拷贝到内核态。
select 要每次都从用户态拷贝到内核态,并且是自己轮询,直到有数据就从内核拷贝数据到用户十分耗时
poll没有个数限制,因为用的是链表,而select只能用有32*32个地址,应为select的fd最多只有32个正数大小
在ET模式下,要做成非阻塞,因为这样很容易会死锁
[https://blog.csdn.net/russell_tao/article/details/7160071]
(https://blog.csdn.net/russell_tao/article/details/7160071)
https://juejin.im/post/5a3b7c1a5188252582278ef2